pandas.DataFrame.merge#
- DataFrame.merge(правый, how='inner', на=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False, суффиксы=('_x', '_y'), copy=None, индикатор=False, проверять=None)[источник]#
Объедините объекты DataFrame или именованные Series с соединением в стиле базы данных.
Именованный объект Series рассматривается как DataFrame с одним именованным столбцом.
Объединение выполняется по столбцам или индексам. Если объединение столбцов по столбцам, индексы DataFrame будет проигнорирован. В противном случае, если объединение индексов на индексах или индексов на столбце или столбцах, индекс будет передан. При выполнении перекрестного объединения не допускаются спецификации столбцов для объединения.
Предупреждение
Если оба ключевых столбца содержат строки, где ключ является нулевым значением, эти строки будут сопоставлены друг с другом. Это отличается от обычного поведения SQL-соединения и может привести к неожиданным результатам.
- Параметры:
- правыйDataFrame или именованный Series
Объект для слияния.
- how{‘left’, ‘right’, ‘outer’, ‘inner’, ‘cross’}, по умолчанию ‘inner’
Тип слияния для выполнения.
left: использовать только ключи из левого фрейма, аналогично SQL left outer join; сохранять порядок ключей.
right: использовать только ключи из правого фрейма, аналогично правому внешнему соединению в SQL; сохранять порядок ключей.
outer: использует объединение ключей из обоих фреймов, аналогично полному внешнему соединению SQL; сортирует ключи лексикографически.
inner: используйте пересечение ключей из обоих фреймов, аналогично внутреннему соединению SQL; сохраняет порядок левых ключей.
cross: создаёт декартово произведение из обоих фреймов, сохраняет порядок левых ключей.
- наметка или список
Имена столбцов или уровней индекса для объединения. Они должны присутствовать в обоих DataFrame. Если на равно None и не выполняется слияние по индексам, то по умолчанию это пересечение столбцов в обоих DataFrames.
- left_onметка или список, или массивоподобный
Имена столбцов или уровней индекса для объединения в левом DataFrame. Также могут быть массивом или списком массивов длины левого DataFrame. Эти массивы обрабатываются как столбцы.
- right_onметка или список, или массивоподобный
Имена столбцов или уровней индекса для соединения в правом DataFrame. Также может быть массивом или списком массивов длины правого DataFrame. Эти массивы обрабатываются как если бы они были столбцами.
- left_indexbool, по умолчанию False
Используйте индекс из левого DataFrame как ключ(и) соединения. Если это MultiIndex, количество ключей в другом DataFrame (либо индекс, либо количество столбцов) должно соответствовать количеству уровней.
- right_indexbool, по умолчанию False
Использовать индекс из правого DataFrame в качестве ключа соединения. Те же предостережения, что и для left_index.
- sortbool, по умолчанию False
Сортировать ключи соединения лексикографически в результирующем DataFrame. Если False, порядок ключей соединения зависит от типа соединения (ключевое слово how).
- суффиксысписок-подобный, по умолчанию (“_x”, “_y”)
Последовательность длины 2, где каждый элемент необязательно является строкой, указывающей суффикс для добавления к перекрывающимся именам столбцов в left и правый соответственно. Передайте значение None вместо строки, чтобы указать, что имя столбца из left или правый должен оставаться как есть, без суффикса. По крайней мере одно из значений не должно быть None.
- copybool, по умолчанию True
Если False, избегать копирования, если возможно.
Примечание
The copy ключевое слово изменит поведение в pandas 3.0. Копирование при записи будет включено по умолчанию, что означает, что все методы с copy ключевое слово будет использовать механизм ленивого копирования для отложенного копирования и игнорирования copy ключевое слово. The copy ключевое слово будет удалено в будущей версии pandas.
Вы уже можете получить будущее поведение и улучшения, включив copy on write
pd.options.mode.copy_on_write = True- индикаторbool или str, по умолчанию False
Если True, добавляет столбец в выходной DataFrame с названием "_merge" с информацией об источнике каждой строки. Столбцу можно дать другое имя, указав строковый аргумент. Столбец будет иметь категориальный тип со значением "left_only" для наблюдений, чей ключ слияния встречается только в левом DataFrame, "right_only" для наблюдений, чей ключ слияния встречается только в правом DataFrame, и "both", если ключ слияния наблюдения найден в обоих DataFrame.
- проверятьstr, optional
Если указано, проверяет, является ли слияние указанного типа.
“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
Объединить 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