如何在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
相关产品推荐
相关产品推荐

