You need to enable JavaScript to run this app. Pandas DataFrame合并相同时间特征行并累加qty的实现问题
优惠活动
大模型
产品
解决方案
定价
更多

Pandas DataFrame合并相同时间特征行并累加qty的实现问题

你现有代码的核心问题

你写的连续遍历逻辑存在两个硬bug,才会导致合并结果不稳定:

  • 累加逻辑没有同步更新基准值:每次匹配到同时间特征的行时,你只修改了结果df里对应行的Qty数值,用来做同组判断的temp变量还停留在组内第一行的原始Qty值。举个例子,同组3行的qty分别为1、2、3,按照你的逻辑,第二行匹配时会把累计值算成1+2=3,但temp的值还是最初的1;到第三行匹配时,你又拿temp的1加第三行的3,把之前的累计值直接覆盖成4,根本没法算出正确的总和6。
  • 索引匹配错位:你手动维护的行号变量j没有和当前所在的分组位置实时对应,一旦同组行的数量超过2条,很容易把本该累加的行当成新的独立组追加,这就是为什么5条完全相同的行最后会拆成2条甚至更多结果行。

最稳定简便的实现方式

完全不需要手写遍历循环,Pandas自带的groupby聚合功能就是为这类“按特征分组合并、对指定列做求和”的场景设计的,运行效率比手写循环高很多,也没有逻辑漏洞。
直接用如下代码即可:

# 按4个时间特征分组,对qty列求和,as_index=False保证结果是常规结构的DataFrame
merged_df = original_df.groupby(
    by=['hour', 'day', 'week', 'month'],
    as_index=False
)['qty'].sum()

这个方法不依赖“同特征行必须连续”的前提,不管相同时间特征的行在原始df里是分散还是连续,都能准确把所有同组的行合并、对qty列完成求和,最终的df里每一行的时间特征组合都是唯一的,完全匹配你的需求。

如果你要适配之前代码里的大写列名(Hour、Day、Week、Month、Qty),只要把对应列名替换成你的实际列名即可:

# 适配你原有大写列名的版本
sicdf = df_sic1.groupby(
    by=['Hour', 'Day', 'Week', 'Month'],
    as_index=False
)['Qty'].sum()

内容的提问来源于stack exchange,提问作者dukedoug

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.26 10:15:03