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

Python Pandas实现多条件触发重置的分列累积求和

多条件分列重置的累积求和实现

问题描述

现有如下结构的数据集:

ref_cumsumevent_condition
1None
2None
3None
Nonecondition1
2None
4None
6None
Nonecondition2
1None
2None
3None

需要基于ref_cumsum列生成两个累积求和列:

  • cumsum1:仅在event_condition为condition1时重置,其余情况持续累积
  • cumsum2:仅在event_condition为condition2时重置,其余情况持续累积

期望得到的结果如下:

ref_cumsumevent_conditioncumsum1cumsum2
1None11
2None33
3None66
0condition106
2None28
4None612
6None1218
0condition2120
1None131
2None153
3None186

(注:原示例中ref_cumsum的None值在累积时按0处理)

解决方案

核心思路是为每个条件生成独立的分组标识,通过分组后计算累积和实现按需重置。具体代码如下:

import pandas as pd

# 构造示例数据
reference_cumsum = [1,2,3,None,2,4,6,None,1,2,3]
condition = [None,None,None,'condition1',None,None,None,'condition2',None,None,None]
df = pd.DataFrame({'ref_cumsum': reference_cumsum, 'event_condition': condition})

# 将ref_cumsum中的None替换为0,避免累积求和空值问题
df['ref_cumsum'] = df['ref_cumsum'].fillna(0)

# 生成cumsum1的分组键:每次触发condition1时分组号递增
df['group1'] = (df['event_condition'] == 'condition1').cumsum()
# 生成cumsum2的分组键:每次触发condition2时分组号递增
df['group2'] = (df['event_condition'] == 'condition2').cumsum()

# 按分组计算对应条件的累积求和
df['cumsum1'] = df.groupby('group1')['ref_cumsum'].cumsum()
df['cumsum2'] = df.groupby('group2')['ref_cumsum'].cumsum()

# 可选:删除临时分组列
df = df.drop(['group1', 'group2'], axis=1)

print(df)

代码解释

  1. 数据预处理:把ref_cumsum里的None替换成0,确保累积求和逻辑正常运行。
  2. 分组键生成:
    • group1:对event_condition == 'condition1'的结果做累积求和,每次触发condition1时分组号加1,这样后续累积会在新分组重新开始。
    • group2:同理,针对condition2生成独立的分组标识,互不影响cumsum1的累积逻辑。
  3. 分组累积求和:用各自的分组键对ref_cumsum执行cumsum,同一分组内持续累加,触发条件后进入新分组,重新计算累积和。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 00:47:16