Короткий ответ
Рост числа строк после merge почти всегда означает, что ключ объединения не уникален в одной из таблиц (связь один-ко-многим или многие-ко-многим), и для каждой совпадающей строки левой таблицы находится несколько строк правой, что "размножает" результат.
Как это работает подробнее
merge сопоставляет каждую строку левой таблицы со всеми строками правой, где совпал ключ; если ключ в правой таблице повторяется (например, у пользователя несколько адресов доставки), для одного заказа в результате появится несколько строк — по одной на каждый адрес.
Пример кода
question-121.py
import pandas as pd
orders = pd.DataFrame({'order_id': [1, 2], 'user_id': [10, 20]})
addresses = pd.DataFrame({'user_id': [10, 10, 20], 'address': ['a1', 'a2', 'b1']})
merged = pd.merge(orders, addresses, on='user_id')
print(len(orders), len(merged))Что использовать на практике
- Практика. перед merge стоит проверить df2['key'].duplicated().sum() или df2['key'].value_counts(), чтобы понять, сколько раз повторяется ключ; после merge полезно сравнить len(result) с len(df1) — если они не совпадают при ожидаемой связи один-к-одному, это сигнал проблемы.
- Проверка. len(orders) равен 2, а len(merged) равен 3, потому что у user_id=10 два адреса — именно такая проверка числа строк до и после merge и выявляет проблему.
Подводные камни
- Частая ошибка. не проверяют уникальность ключа перед merge и узнают о размножении строк только тогда, когда итоговая сумма метрики (например, общая выручка) оказывается больше, чем в источнике; "чинят" проблему добавлением drop_duplicates() после merge без понимания, какую именно дублирующуюся строку правой таблицы нужно оставить, что может привести к потере нужной информации.