Выбор ответа Junior merge, join и concat спрашивают часто обновлено
Почему после merge строк стало больше
Вопрос
В orders 1000 строк. После orders.merge(addresses, on="user_id", how="left") стало 1240. Почему?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: В addresses у части клиентов по несколько записей, и заказы размножились. При соединении многие-ко-многим каждая строка слева соединяется с каждым совпадением справа.
Варианты ответа
- В
addressesу части клиентов по несколько записей, и заказы размножилисьправильный ответ - Left join добавляет в конец строки правой таблицы, у которых нет пары слева
- pandas дублирует строки, у которых в ключе
user_idстоит NaN - Это ошибка pandas при left join, нужно обновиться до свежей версии
Разбор
При соединении многие-ко-многим каждая строка слева соединяется с каждым совпадением справа. Left join не добавляет строки правой таблицы без пары, это делает outer. Лечится проверкой уникальности ключа, drop_duplicates по ключу или агрегацией справочника, а ловится параметром validate="many_to_one".
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.