pandas.merge#

pandas.merge(left, правый, how='inner', на=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False, суффиксы=('_x', '_y'), copy=None, индикатор=False, проверять=None)[источник]#

Объедините объекты DataFrame или именованные Series с соединением в стиле базы данных.

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

Объединение выполняется по столбцам или индексам. Если объединение столбцов по столбцам, индексы DataFrame будет проигнорирован. В противном случае, если объединение индексов на индексах или индексов на столбце или столбцах, индекс будет передан. При выполнении перекрестного объединения не допускаются спецификации столбцов для объединения.

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

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

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

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

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

Тип слияния для выполнения.

  • left: использовать только ключи из левого фрейма, аналогично SQL left outer join; сохранять порядок ключей.

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

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

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

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

наметка или список

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

left_onметка или список, или массивоподобный

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

right_onметка или список, или массивоподобный

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

left_indexbool, по умолчанию False

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

right_indexbool, по умолчанию False

Использовать индекс из правого DataFrame в качестве ключа соединения. Те же предостережения, что и для left_index.

sortbool, по умолчанию False

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

суффиксысписок-подобный, по умолчанию (“_x”, “_y”)

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

copybool, по умолчанию True

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

Примечание

The copy ключевое слово изменит поведение в pandas 3.0. Копирование при записи будет включено по умолчанию, что означает, что все методы с copy ключевое слово будет использовать механизм ленивого копирования для отложенного копирования и игнорирования copy ключевое слово. The copy ключевое слово будет удалено в будущей версии pandas.

Вы уже можете получить будущее поведение и улучшения, включив copy on write pd.options.mode.copy_on_write = True

индикаторbool или str, по умолчанию False

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

проверятьstr, optional

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

  • “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

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

Примеры

>>> 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  bar        2  bar        6
3  baz        3  baz        7
4  foo        5  foo        5
5  foo        5  foo        8

Объединить DataFrames 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  bar           2  bar            6
3  baz           3  baz            7
4  foo           5  foo            5
5  foo           5  foo            8

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

>>> 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