Выбор ответа Junior merge, join и concat спрашивают часто обновлено

Почему после merge строк стало больше

Вопрос

В orders 1000 строк. После orders.merge(addresses, on="user_id", how="left") стало 1240. Почему?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: В addresses у части клиентов по несколько записей, и заказы размножились. При соединении многие-ко-многим каждая строка слева соединяется с каждым совпадением справа.

Варианты ответа

  1. В addresses у части клиентов по несколько записей, и заказы размножилисьправильный ответ
  2. Left join добавляет в конец строки правой таблицы, у которых нет пары слева
  3. pandas дублирует строки, у которых в ключе user_id стоит NaN
  4. Это ошибка pandas при left join, нужно обновиться до свежей версии

Разбор

При соединении многие-ко-многим каждая строка слева соединяется с каждым совпадением справа. Left join не добавляет строки правой таблицы без пары, это делает outer. Лечится проверкой уникальности ключа, drop_duplicates по ключу или агрегацией справочника, а ловится параметром validate="many_to_one".

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.