Как безопасно соединять таблицы в pandas
Вопрос
Вам нужно соединить заказы с клиентами и справочником тарифов. Как сделаете, чтобы не потерять и не размножить строки?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Выбор `how` под вопрос: обычно `left` от таблицы фактов
Проверка уникальности ключа справочника, `validate="many_to_one"`
Сравнение числа строк до и после
Типы и чистота ключей: `astype`, `strip`, регистр
`indicator=True`, чтобы посчитать строки без пары
Фильтры по правой таблице с учётом NaN
Что могут спросить следом
- Что будет, если в справочнике тарифов есть история версий?
- Как найти клиентов без заказов?
- Почему после merge суммы выручки выросли?
Разбор
Беру таблицу фактов, заказы, за левую и соединяю how="left", чтобы ни один заказ не пропал. Перед этим проверяю справочники: ключ должен быть уникальным, и я явно пишу validate="many_to_one", тогда дубликаты в справочнике сразу упадут ошибкой, а не тихо размножат заказы. Сверяю len до и после. Проверяю типы ключей: число против строки pandas не соединит, а строки с пробелами молча не совпадут. Добавляю indicator=True и смотрю, сколько заказов не нашли клиента, это часто баг в данных. Если у тарифов есть история версий, обычный merge размножит строки, тогда нужен merge_asof по дате или фильтр актуальной версии. И помню, что фильтр == по колонке правой таблицы после left join выкинет строки с NaN.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.