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

如何在Python中基于特定条件实现DataFrame动态累计计数

数据处理需求与实现说明

原始数据集

stack = [('2021-04-25', 9, 0, 0, 0, 0, 'A'),
           ('2021-04-26', 0, 0, 0, 0, 0, 'A'),
           ('2021-04-27', 0, 0, 0, 0, 9, 'A'),
           ('2021-04-28', 56, 0, 0, 0, 53, 'A'),
           ('2021-04-29', 1, 0, 1, 0, 0, 'A'),
           ('2021-04-30', 3, 0, 0, 0, 4, 'A'),
           ('2021-05-01', 0, 0, 0, 0, 0, 'A'),
           ('2021-05-02', 21, 0, 0, 0, 0, 'A'),
           ('2021-05-03', 4, 0, 0, 0, 0, 'A'),
           ('2021-05-04', 1, 0, 0, 0, 0, 'A')]
stack = pd.DataFrame(stack, columns=['Date', 'V', 'W', 'X', 'Y', 'Z', 'Group'])

期望输出结果

stack_out = [('2021-04-25', 9, 0, 0, 0, 0, 'A'),
           ('2021-04-26', 9, 0, 0, 0, 0, 'A'),
           ('2021-04-27', 9, 0, 0, 0, 9, 'A'),
           ('2021-04-28', 56, 0, 0, 0, 62, 'A'),
           ('2021-04-29', 4, 0, 1, 0, 62, 'A'),
           ('2021-04-30', 6, 0, 0, 0, 66, 'A'),
           ('2021-05-01', 0, 0, 0, 0, 68, 'A'),
           ('2021-05-02', 21, 0, 0, 0, 68, 'A'),
           ('2021-05-03', 25, 0, 0, 0, 68, 'A'),
           ('2021-05-04', 26, 0, 0, 0, 68, 'A')]
stack_out = pd.DataFrame(stack_out, columns=['Date', 'V', 'W', 'X', 'Y', 'Z', 'Group'])

处理规则

  • 当W、X、Y、Z列存在非零值时,需从V列中扣除对应数值;
  • 输出中V列为扣除后的动态累计剩余值;
  • 每月月末,V列计数重置为0,月末V列剩余值需添加至次月月初的Z列;
  • Z列同样为动态累计值,加上月末从V列转入的数值。

补充说明

  • 4月28日V列值为56,Z列值为53,扣除后剩余3,需累加到次日,因此4月29日V列为4;
  • 4月29日,用V列的4扣除X列的1,剩余3累加到次日,因此4月30日V列为6;
  • 4月30日,用V列的6扣除Z列的4,剩余2。由于是月末,5月1日V列重置为0,剩余的2添加至Z列,因此Z列从66变为68。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 20:09:24