Число строк в результате слияния, превышающее количество строк в df_1 , можно объяснить на следующем примере:
df_1 содержит 2 строки:
uid revenue order_day
0 111 200.01 2019-09-01
1 111 300.00 2019-09-02
df_2 содержит 5 строк:
uid source session_day
0 111 100.0 2019-09-01
1 111 200.0 2019-09-01
2 111 300.0 2019-09-02
3 111 400.5 2019-09-02
4 222 100.0 2019-09-03
Обратите внимание, что оно содержит:
- Две строки с uid == 111 и session_day == 2019-09-01 , которые будут объединены со строкой с индексом 0 в df_1 .
- Две строки с uid == 111 и session_day == 2019-09-02 , которые будут объединены со строкой с индексом 1 в df_1.
Вот почему результат слияния:
uid revenue order_day source session_day
0 111 200.01 2019-09-01 100.0 2019-09-01
1 111 200.01 2019-09-01 200.0 2019-09-01
2 111 300.00 2019-09-02 300.0 2019-09-02
3 111 300.00 2019-09-02 400.5 2019-09-02
Возможно, вы предположили, что слияние выполняется следующим образом:
- Возьмите строку из df_1 .
- Найдите df_2 для строки single с соответствующими столбцами соединения.
- Если найдено, добавьте результат слияния (для этих 2 строк) к результату.
- Reвыполните всю процедуру для следующих строк: df_1 .
На самом деле, "левое" слияние выполняется другим способом :
- Возьмите строку из df_1 (назовем это базовая строка ).
- Для каждая строка из df_2 с соответствующими столбцами соединения (если они найдены) генерируют строку в результате, состоящую из:
- содержимого из базовой строки (из df_1 ),
- содержимоготекущая строка (от df_2 ).
Если вы хотите объединить каждую строку из df_1 с вмаксимум 1 строка из df_2 , вы должны начинать с drop_duplacates с df_2 , с подмножеством , содержащим столбцы слияния.