You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

咨询: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 22:09:22