Spec-Zone.ru › pandas 1

pandas.merge

pandas.merge(left, right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False, suffixes=('_x', '_y'), copy=True, indicator=False, validate=None)[source]

Объединение DataFrame или именованных Series-объектов с помощью соединения в стиле базы данных.

Именованный объект Series обрабатывается как DataFrame с единственным именованным столбцом.

Объединение выполняется по столбцам или индексам. Если объединение выполняется по столбцам, индексы DataFrame будут проигнорированы. В противном случае, если объединение выполняется по индексам или индексам и столбцу/столбцам, индекс будет передан. При выполнении кросс-объединения не разрешается указывать столбцы для объединения.

Предупреждение

Если оба столбца ключей содержат строки с нулевым значением ключа, эти строки будут сопоставляться друг с другом. Это отличается от обычного поведения объединения SQL и может привести к неожиданным результатам.

Параметры
left:DataFrame
right:DataFrame или именованный Series

Объект для объединения.

how:{‘left’, ‘right’, ‘outer’, ‘inner’, ‘cross’}, по умолчанию ‘inner’

Тип объединения, который будет выполнен.

  • left: использовать только ключи из левой таблицы, аналогично левому внешнему объединению SQL; сохранить порядок ключей.

  • right: использовать только ключи из правой таблицы, аналогично правому внешнему объединению SQL; сохранить порядок ключей.

  • outer: использовать объединение ключей из обеих таблиц, аналогично полному внешнему объединению SQL; отсортировать ключи лексикографически.

  • inner: использовать пересечение ключей из обеих таблиц, аналогично внутреннему объединению SQL; сохранить порядок левых ключей.

  • cross: создает декартово произведение из обеих таблиц, сохраняет порядок левых ключей.

    Добавлено в версии 1.2.0.

on:имя или список

Имена столбца или уровня индекса для объединения. Они должны быть найдены в обеих DataFrame. Если on равно None и объединение не выполняется по индексам, оно по умолчанию равно пересечению столбцов в обеих DataFrame.

left_on:имя или список или массив-подобный объект

Имена столбца или уровня индекса для объединения в левой DataFrame. Также может быть массивом или списком массивов длиной левой DataFrame. Эти массивы обрабатываются как столбцы.

right_on:имя или список или массив-подобный объект

Имена столбца или уровня индекса для объединения в правой DataFrame. Также может быть массивом или списком массивов длиной правой DataFrame. Эти массивы обрабатываются как столбцы.

left_index:bool, по умолчанию False

Использовать индекс из левой DataFrame в качестве ключа(ей) объединения. Если это многоуровневый индекс, количество ключей в другой DataFrame (либо индекс, либо количество столбцов) должно соответствовать количеству уровней.

right_index:bool, по умолчанию False

Использовать индекс из правой DataFrame в качестве ключа объединения. Аналогичные замечания, как для left_index.

sort:bool, по умолчанию False

Сортировать ключи объединения лексикографически в результирующем DataFrame. Если False, порядок ключей объединения зависит от типа объединения (параметр how).

suffixes:последовательность из двух элементов, по умолчанию (“_x”, “_y”)

Последовательность длины 2, где каждый элемент — необязательно строка, указывающая суффикс, который добавляется к совпадающим именам столбцов в left и right соответственно. Передайте значение None вместо строки, чтобы указать, что имя столбца из left или right должно остаться без суффикса. По крайней мере одно из значений не должно быть None.

copy:bool, по умолчанию True

Если False, избегать копирования, если это возможно.

indicator:bool или строка, по умолчанию False

Если True, добавляет столбец в выходной DataFrame под названием “_merge” с информацией о источнике каждой строки. Столбцу можно присвоить другое имя, указав строковый аргумент. Столбец будет иметь категориальный тип со значением “left_only” для наблюдений, ключ объединения которых присутствует только в левой DataFrame, “right_only” для наблюдений, ключ объединения которых присутствует только в правой DataFrame, и “both”, если ключ объединения наблюдения присутствует в обеих DataFrame.

validate:строка, необязательно

Если указано, проверяет, является ли объединение указанного типа.

  • “one_to_one” или “1:1”: проверить, уникальны ли ключи объединения в обоих наборах данных.

  • “one_to_many” или “1:m”: проверить, уникальны ли ключи объединения в левом наборе данных.

  • “many_to_one” или “m:1”: проверить, уникальны ли ключи объединения в правом наборе данных.

  • “many_to_many” или “m:m”: разрешено, но не приводит к проверкам.

Возвращаемое значение
DataFrame

DataFrame объединенных объектов.

См. также

merge_ordered

Объединение с необязательным заполнением/интерполяцией.

merge_asof

Объединение на ближайших ключах.

DataFrame.join

Аналогичный метод, использующий индексы.

Примечания

Поддержка указания уровней индекса как параметров on, left_on и right_on была добавлена в версии 0.23.0. Поддержка объединения именованных объектов Series была добавлена в версии 0.24.0

Примеры

>>> df1 = pd.DataFrame({'lkey': ['foo', 'bar', 'baz', 'foo'],
...                     'value': [1, 2, 3, 5]})
>>> df2 = pd.DataFrame({'rkey': ['foo', 'bar', 'baz', 'foo'],
...                     'value': [5, 6, 7, 8]})
>>> df1
    lkey value
0   foo      1
1   bar      2
2   baz      3
3   foo      5
>>> df2
    rkey value
0   foo      5
1   bar      6
2   baz      7
3   foo      8

Объединение df1 и df2 по столбцам lkey и rkey. Столбцы значений имеют суффиксы по умолчанию _x и _y.

>>> df1.merge(df2, left_on='lkey', right_on='rkey')
  lkey  value_x rkey  value_y
0  foo        1  foo        5
1  foo        1  foo        8
2  foo        5  foo        5
3  foo        5  foo        8
4  bar        2  bar        6
5  baz        3  baz        7

Объединение DataFrame df1 и df2 с указанными суффиксами слева и справа, добавленными к любым совпадающим столбцам.

>>> df1.merge(df2, left_on='lkey', right_on='rkey',
...           suffixes=('_left', '_right'))
  lkey  value_left rkey  value_right
0  foo           1  foo            5
1  foo           1  foo            8
2  foo           5  foo            5
3  foo           5  foo            8
4  bar           2  bar            6
5  baz           3  baz            7

Объединение DataFrame df1 и df2, но сгенерировать исключение, если DataFrames имеют какие-либо совпадающие столбцы.

>>> df1.merge(df2, left_on='lkey', right_on='rkey', suffixes=(False, False))
Traceback (most recent call last):
...
ValueError: columns overlap but no suffix specified:
    Index(['value'], dtype='object')
>>> df1 = pd.DataFrame({'a': ['foo', 'bar'], 'b': [1, 2]})
>>> df2 = pd.DataFrame({'a': ['foo', 'baz'], 'c': [3, 4]})
>>> df1
      a  b
0   foo  1
1   bar  2
>>> df2
      a  c
0   foo  3
1   baz  4
>>> df1.merge(df2, how='inner', on='a')
      a  b  c
0   foo  1  3
>>> df1.merge(df2, how='left', on='a')
      a  b  c
0   foo  1  3.0
1   bar  2  NaN
>>> df1 = pd.DataFrame({'left': ['foo', 'bar']})
>>> df2 = pd.DataFrame({'right': [7, 8]})
>>> df1
    left
0   foo
1   bar
>>> df2
    right
0   7
1   8
>>> df1.merge(df2, how='cross')
   left  right
0   foo      7
1   foo      8
2   bar      7
3   bar      8

© 2008–2022, AQR Capital Management, LLC, Lambda Foundry, Inc. and PyData Development Team
Licensed under the 3-clause BSD License.
https://pandas.pydata.org/pandas-docs/version/1.5.0/reference/api/pandas.merge.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API