Spec-Zone.ru › pandas 2

pandas.DataFrame.merge

DataFrame.merge(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 будут игнорироваться. В противном случае, если объединение выполняется по индексам или по индексу и столбцу или столбцам, индекс будет передан. При выполнении объединения "поперек" (cross merge) не допускаются какие-либо указания столбцов для объединения.

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

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

Параметры:
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, количество ключей в другом DataFrame (либо индекс, либо количество столбцов) должно совпадать с количеством уровней.

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

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

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

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

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

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

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

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

Примечание

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

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

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

Если True, добавляет в результирующий DataFrame столбец с именем “_merge” со сведениями о источнике каждой строки. Столбцу можно дать другое имя, передав строковый аргумент. Столбец будет иметь тип Categorical со значением “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

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

Примеры

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

Объединение 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  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

© 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.DataFrame.merge.html

Spec-Zone.ru

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