我有两个数据框。第一个包含有关订单的数据:df_1,其列['uid','revenue','order_day']有50415行。第二个包含有关访问的信息:df_2,列['uid','source','session_day']包含358532行。我想从访问者的数据框中获取客户来源。我试图通过两列合并数据帧:result = df_1.merge(df_2, how=left ,left_on=['uid','order_day'],right_on=['uid','session_day'])
但是结果是我得到62369行,并且'revenue'
列的总和增加了。我不明白为什么会这样。当我写how='left'
时,我希望左边的df_1不变,并且将添加df_2中'uid'
和'..._day'
中相似的行。有人可以向我解释为什么我没有得到预期的结果,我应该怎么做?感谢您的任何评论
答案 0 :(得分:0)
合并结果中的行数超过 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 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 中的每一行与最多1行 在 df_2 中,您必须从 df_2 中的 drop_duplacates 开始,并使用 subset 包含合并列。