Spec-Zone.ru › pandas 2

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=None, indicator=False, validate=None)[source]

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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, избежать копирования, если это возможно.

Примечание

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

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

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

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

validate:str, необязательно

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

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

Объединение DataFrames 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/2.2.2/reference/api/pandas.merge.html

Spec-Zone.ru

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