Spec-Zone.ru › pandas 1

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

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

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

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

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

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

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

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

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

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

Примечания

Поддержка указания уровней индексов как параметров 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, но при наличии совпадающих столбцов генерируется исключение.

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

Spec-Zone.ru

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