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.