Функция merge() в pandas: соединение таблиц (join)
pd.merge(left, right, on=ключ, how=тип) соединяет два DataFrame по общему ключу — это pandas-аналог SQL JOIN. Параметр how задаёт тип: inner (только совпадения), left (все строки левой), outer (объединение), right. Аналитик использует merge, чтобы подтянуть к событиям атрибуты пользователя, к заказам — данные товара.
Главная ловушка — fan-out: если в правой таблице ключ не уникален, merge размножит строки левой (связь один-ко-многим), и суммы задвоятся. Перед left join делай drop_duplicates по ключу или проверяй validate='m:1'. indicator=True добавляет колонку _merge (both/left_only/right_only) — удобно для анти-join. Если имена ключей разные — left_on/right_on.
Где спрашивают на собеседовании
merge и типы join — обязательный вопрос. Спрашивают разницу inner/left/outer, как найти строки без пары (how='left' + _merge=='left_only') и как избежать дублей при fan-out. Часто просят объяснить связь с SQL JOIN.
FAQ: частые вопросы про merge
Чем merge отличается от join и concat?
merge соединяет по значению колонок-ключей (как SQL JOIN). df.join склеивает по индексу. concat просто «сшивает» таблицы по оси (сверху-вниз или слева-направо) без сопоставления ключей.
Почему после merge стало больше строк?
Это fan-out: ключ в правой таблице не уникален, и каждая левая строка размножилась под все совпадения. Убери дубли (drop_duplicates по ключу) или используй validate='m:1' для контроля.
Как сделать анти-join в pandas?
merge с how='left', indicator=True, затем фильтр _merge == 'left_only' — это строки левой таблицы без пары в правой.