DataFrame.merge() / pandas.merge()
Метод merge() объединяет два DataFrame по одному или нескольким общим столбцам-ключам, аналогично SQL JOIN. Более гибкий, чем join() (тот работает только по индексу).
Сигнатура
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)
Параметры
right— второйDataFrame.how—'inner'(по умолчанию),'left','right','outer','cross'.on— имя общего столбца(ов) для соединения.left_on/right_on— разные имена ключей в двух таблицах.left_index/right_index— использовать индекс вместо столбца.suffixes— суффиксы для совпадающих имён.indicator— добавить столбец_mergeс источником каждой строки.
Возвращаемое значение
Новый DataFrame с объединёнными столбцами.
Примеры
Пример 1. Inner join по общему столбцу
import pandas as pd
sensors = pd.DataFrame({
"sensor_id": ["s1", "s2", "s3"],
"model": ["DHT11", "DS18B20", "BMP280"],
})
readings = pd.DataFrame({
"sensor_id": ["s1", "s2", "s1"],
"value": [22, 23, 24],
})
print(readings.merge(sensors, on="sensor_id"))
sensor_id value model
0 s1 22 DHT11
1 s2 23 DS18B20
2 s1 24 DHT11
Пример 2. Left join сохраняет все строки слева
import pandas as pd
a = pd.DataFrame({"id": [1, 2, 3], "x": [10, 20, 30]})
b = pd.DataFrame({"id": [1, 2], "y": [100, 200]})
print(a.merge(b, on="id", how="left"))
id x y
0 1 10 100.0
1 2 20 200.0
2 3 30 NaN
Пример 3. Разные имена ключей
import pandas as pd
orders = pd.DataFrame({"user_id": [1, 2], "amount": [100, 200]})
users = pd.DataFrame({"id": [1, 2], "name": ["Aigul", "Bek"]})
print(orders.merge(users, left_on="user_id", right_on="id"))
user_id amount id name
0 1 100 1 Aigul
1 2 200 2 Bek
Пример 4. Outer join + indicator
import pandas as pd
a = pd.DataFrame({"k": [1, 2, 3]})
b = pd.DataFrame({"k": [2, 3, 4]})
print(a.merge(b, on="k", how="outer", indicator=True))
k _merge
0 1 left_only
1 2 both
2 3 both
3 4 right_only
Пример 5. Совпадающие имена → суффиксы
import pandas as pd
a = pd.DataFrame({"id": [1, 2], "v": [10, 20]})
b = pd.DataFrame({"id": [1, 2], "v": [100, 200]})
print(a.merge(b, on="id", suffixes=("_a", "_b")))
id v_a v_b
0 1 10 100
1 2 20 200
См. также
Примечание
Лицензия и источники
Техническое описание функции адаптировано из официальной документации Pandas (https://pandas.pydata.org/docs/), BSD-3-Clause License. Примеры и пояснения — © AlashEd Wiki.