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

基于Signal触发的Cumulative Sum计算方法咨询

基于Signal触发的多组累积求和计算

需求:跟踪Value列的累积和,每次当Signal列取值为1时启动新的累积计算,生成对应组数的累积和列,均计算至最后一行(Index=11)。

原始数据:

IndexValueSignal
030
180
280
371
490
5100
6141
7100
8100
941
10100
11100

预期输出:

IndexValueSignalCumsum_1Cumsum_2Cumsum_3
030000
180000
280000
371700
4901600
51002600
614140140
710050240
810060340
94164384
10100744814
11100845824

解决方案(Pandas实现)

思路

  1. 先定位Signal列值为1的所有行索引,这些是每组累积和的起始点
  2. 对每个起始索引,从该位置开始计算Value的累积和,起始位置前的行填充0

完整代码示例

import pandas as pd

# 构造原始数据
data = {
    'Index': [0,1,2,3,4,5,6,7,8,9,10,11],
    'Value': [3,8,8,7,9,10,14,10,10,4,10,10],
    'Signal': [0,0,0,1,0,0,1,0,0,1,0,0]
}
df = pd.DataFrame(data).set_index('Index')

# 获取所有Signal=1的起始索引
start_indices = df[df['Signal'] == 1].index.tolist()

# 生成每组累积和列
for i, start_idx in enumerate(start_indices, 1):
    col_name = f'Cumsum_{i}'
    # 初始化全0列
    df[col_name] = 0
    # 从起始索引开始计算累积和并赋值
    df.loc[start_idx:, col_name] = df.loc[start_idx:, 'Value'].cumsum()

# 输出结果
print(df.reset_index())

代码说明

  • start_indices = df[df['Signal'] == 1].index.tolist():提取所有触发累积计算的起始索引,此处得到[3,6,9]
  • 循环中先创建对应名称的新列并填充0,再对起始索引之后的行计算Value的累积和,覆盖新列的对应位置
  • 最终得到的DataFrame完全匹配预期输出格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 19:09:28