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

使用Python实现按id分组的自定义列尾端累积计算问题求助

Pandas DataFrame 分组累积计算列修正方案

原有代码问题

  • 错误地对字符串类型的date字段调用cumsum方法,本身就会返回非预期结果甚至报错
  • 逻辑完全不符合需求:不需要对base、pwr做累积求和,同一id分组下的pwr和base都是固定值,仅需要取一次差值再叠加final的分组累积和即可

前提说明

计算前需要先按id和date升序排序,保证累积计算的顺序和业务规则一致。

正确实现代码

高效向量化实现(适配同id下pwr、base固定的场景)

# 先排序保证日期顺序正确
df = df.sort_values(['id', 'date']).reset_index(drop=True)
# 直接计算used列
df['used'] = (df['pwr'] - df['base']) + df.groupby('id')['final'].cumsum()

通用适配实现(兼容同id下pwr、base变化的场景)

def calc_used(group):
    # 取分组首行计算初始值
    init_val = group['pwr'].iloc[0] - group['base'].iloc[0]
    # 叠加final的累积和得到used列
    group['used'] = init_val + group['final'].cumsum()
    return group

df = df.sort_values(['id', 'date']).reset_index(drop=True)
df = df.groupby('id', group_keys=False).apply(calc_used)

运行结果验证

运行后输出结果和需求完全匹配:

pwrposiddatebasepositionfinalused
10040aaq12150201565
10040aaq22150202590
10040aaq321502010100
10040aaq42150205105
5030bbq1212510025
5030bbq22125101035

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 20:15:04