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