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