Функция merge
Функция merge применяется для объединения двух таблиц
DataFrame по общему ключу или нескольким ключам.
Она поддерживает различные типы соединений: внутреннее,
левое, правое и внешнее, аналогично SQL-запросам.
В отличие от concat, merge ориентирована на
объединение по значениям столбцов.
Синтаксис
pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None, suffixes=('_x', '_y'))
Пример
Давайте объединим две таблицы по общему столбцу 'a':
import pandas as pd
df1 = pd.DataFrame({
'a': [1, 2, 3, 4],
'b': [10, 20, 30, 40]
})
df2 = pd.DataFrame({
'a': [1, 2, 5, 6],
'c': [100, 200, 500, 600]
})
res = pd.merge(df1, df2, on='a')
print(res)
Результат выполнения кода:
a b c
0 1 10 100
1 2 20 200
В результате получились только строки с совпадающими значениями в столбце 'a' (внутреннее соединение по умолчанию).
Пример
Выполним левое соединение, чтобы сохранить все строки из левой таблицы:
import pandas as pd
df1 = pd.DataFrame({
'a': [1, 2, 3, 4],
'b': [10, 20, 30, 40]
})
df2 = pd.DataFrame({
'a': [1, 2, 5, 6],
'c': [100, 200, 500, 600]
})
res = pd.merge(df1, df2, on='a', how='left')
print(res)
Результат выполнения кода:
a b c
0 1 10 100.0
1 2 20 200.0
2 3 30 NaN
3 4 40 NaN
В левом соединении сохраняются все строки из левой
таблицы, а для отсутствующих значений из правой
подставляется NaN.
Пример
Выполним правое соединение:
import pandas as pd
df1 = pd.DataFrame({
'a': [1, 2, 3, 4],
'b': [10, 20, 30, 40]
})
df2 = pd.DataFrame({
'a': [1, 2, 5, 6],
'c': [100, 200, 500, 600]
})
res = pd.merge(df1, df2, on='a', how='right')
print(res)
Результат выполнения кода:
a b c
0 1 10.0 100
1 2 20.0 200
2 5 NaN 500
3 6 NaN 600
В правом соединении сохраняются все строки из правой
таблицы, а для отсутствующих значений из левой
подставляется NaN.
Пример
Выполним внешнее соединение, которое сохраняет все строки из обеих таблиц:
import pandas as pd
df1 = pd.DataFrame({
'a': [1, 2, 3, 4],
'b': [10, 20, 30, 40]
})
df2 = pd.DataFrame({
'a': [1, 2, 5, 6],
'c': [100, 200, 500, 600]
})
res = pd.merge(df1, df2, on='a', how='outer')
print(res)
Результат выполнения кода:
a b c
0 1 10.0 100.0
1 2 20.0 200.0
2 3 30.0 NaN
3 4 40.0 NaN
4 5 NaN 500.0
5 6 NaN 600.0
Внешнее соединение содержит все строки из обеих
таблиц, а недостающие значения заполняются NaN.
Пример
Объединим таблицы по ключам с разными именами столбцов:
import pandas as pd
df1 = pd.DataFrame({
'key1': [1, 2, 3, 4],
'b': [10, 20, 30, 40]
})
df2 = pd.DataFrame({
'key2': [1, 2, 5, 6],
'c': [100, 200, 500, 600]
})
res = pd.merge(df1, df2, left_on='key1', right_on='key2')
print(res)
Результат выполнения кода:
key1 b key2 c
0 1 10 1 100
1 2 20 2 200
Параметры left_on и right_on позволяют указать
разные столбцы для соединения.
Пример
Изменим суффиксы для столбцов с одинаковыми именами:
import pandas as pd
df1 = pd.DataFrame({
'a': [1, 2],
'b': [10, 20]
})
df2 = pd.DataFrame({
'a': [1, 2],
'b': [100, 200]
})
res = pd.merge(df1, df2, on='a', suffixes=('_left', '_right'))
print(res)
Результат выполнения кода:
a b_left b_right
0 1 10 100
1 2 20 200
Суффиксы помогают различать столбцы с одинаковыми именами из разных таблиц.
Смотрите также
-
функция
concat,
которая объединяет таблицы по строкам или столбцам -
функция
merge_ordered,
которая выполняет упорядоченное объединение таблиц -
функция
merge_asof,
которая объединяет таблицы по ближайшим ключам -
метод
join,
который объединяет таблицы по индексам