咨询:Pandas合并df_day与df_count后结果异常的原因
问题背景
我有两个DataFrame:
df_day
Day 2022-05-02 2 2022-05-03 3 2022-05-04 4 2022-05-05 5 2022-05-06 6 2022-05-07 7 2022-05-08 8 2022-05-09 9 2022-05-10 10 2022-05-11 11 2022-05-12 12 2022-05-13 13 2022-05-14 14 2022-05-15 15 2022-05-16 16 2022-05-17 17 2022-05-18 18 2022-05-19 19 2022-05-20 20 2022-05-21 21 2022-05-22 22 2022-05-23 23 2022-05-24 24 2022-05-25 25 2022-05-26 26 2022-05-27 27 2022-05-28 28 2022-05-29 29 2022-05-30 30 2022-05-31 31 2022-06-01 1 2022-06-02 2 2022-06-03 3 2022-06-04 4
df_count
Weekday Day Count 0 Mon 2 44 1 Tue 3 44 2 Wed 4 32 3 Thu 5 26 4 Fri 6 39 5 Sat 7 39 0 Mon 9 37 1 Tue 10 30 2 Wed 11 33 3 Thu 12 41 4 Fri 13 36 5 Sat 14 38 0 Mon 16 32 1 Tue 17 35 2 Wed 18 35 3 Thu 19 31 4 Fri 20 44 5 Sat 21 31 0 Mon 23 57 1 Tue 24 32 2 Wed 25 34 3 Thu 26 42 4 Fri 27 42 5 Sat 28 29 0 Mon 30 33 1 Tue 31 33 2 Wed 1 33 3 Thu 2 33 4 Fri 3 33 5 Sat 4 33
执行合并代码df_merged = pd.merge(df_day, df_count, 'outer')后,结果出现重复匹配:
0 2 Mon 44.0 1 2 Thu 33.0 2 2 Mon 44.0 3 2 Thu 33.0 4 3 Tue 44.0 5 3 Fri 33.0 6 3 Tue 44.0 7 3 Fri 33.0 8 4 Wed 32.0 9 4 Sat 33.0 10 4 Wed 32.0 11 4 Sat 33.0
预期结果是Day按顺序排列,每个Day对应唯一Weekday,但即使执行df_merged = pd.merge(df_day, df_count, left_on='Day', right_on='Day', how='right'),仍存在重复记录。
异常原因
核心问题出在df_count的Day列存在重复值:
- 比如Day=2在df_count里出现了两次:一次对应Mon(Count=44),另一次对应Thu(Count=33)
- Day=3同样出现两次:对应Tue(Count=44)和Fri(Count=33)
- 其他如Day=4等也存在重复条目
当使用pd.merge时,会根据指定的连接键(这里是Day)做笛卡尔积匹配:df_day里的每一条Day记录,都会和df_count里所有相同Day值的记录一一配对。比如df_day里有两条Day=2的记录(2022-05-02和2022-06-02),每条都会和df_count里的两条Day=2记录匹配,最终生成2×2=4条Day=2的合并结果,这就是你看到的重复现象。
哪怕指定how='right',只要df_count里的Day列存在重复,合并时就会保留这些重复的匹配关系,所以结果依然会有重复记录。
内容的提问来源于stack exchange,提问作者user19695340
相关产品推荐
相关产品推荐

