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

Pandas实现自定义累积求和:中途重置求和起始值

没问题,这是个很常见的需求——我们可以通过分组累积求和或者差值调整的方式来实现你要的效果,下面结合你的例子一步步说明:

分析你的需求

从数据对比能看出来,你需要在指定行(比如行9、行18)重置累积求和的起点:

  • 行9之前保持正常的cumsum()逻辑
  • 行9时,累积值直接重置为该行的Value(343.6),后续行基于这个新起点继续累加
  • 行18再次重复这个重置逻辑

方法一:差值调整法(简单直接)

先计算原始的累积和,再针对重置点对后续行的结果做差值修正,适合已知固定重置位置的场景:

import pandas as pd

# 先构造你的示例数据
data = {
    'Value': [329.6,34.0,10,8,3,-2,-4,-34,-1,343.6,0,-33,-3,0,1,4,0,21,333.6]
}
df = pd.DataFrame(data)

# 1. 计算原始累积和
df['Original Cumulative Sum'] = df['Value'].cumsum()

# 2. 定义重置点及其对应的目标累积值
reset_info = {9: 343.6, 18: 333.6}

# 3. 创建调整列,用于修正后续行的累积值
df['adjustment'] = 0

# 4. 遍历每个重置点,计算需要减去的差值并应用到后续行
for idx, target_val in reset_info.items():
    # 计算原始累积值与目标值的差值
    diff = df.loc[idx, 'Original Cumulative Sum'] - target_val
    # 对当前重置点及之后的所有行应用调整
    df.loc[idx:, 'adjustment'] += diff

# 5. 得到期望的累积和
df['Expected Cumulative Sum'] = df['Original Cumulative Sum'] - df['adjustment']

运行后,Expected Cumulative Sum列就会完全匹配你想要的结果。


方法二:分组累积法(更灵活)

如果你的重置点不是固定行号,而是基于某种条件(比如当Value等于前一行的累积值时触发重置),可以用分组的方式动态处理:

# 1. 标记重置点:行9、行18标记为1,其他为0
df['reset_flag'] = df.index.isin([9,18]).astype(int)

# 2. 生成分组键:每遇到一个重置点,分组号+1
df['group_id'] = df['reset_flag'].cumsum()

# 3. 自定义分组内的累积求和逻辑
def custom_cumsum(group):
    if group['reset_flag'].iloc[0] == 1:
        # 重置组:第一个值直接取当前Value,后续基于前值累加
        cum_list = [group['Value'].iloc[0]]
        for val in group['Value'].iloc[1:]:
            cum_list.append(cum_list[-1] + val)
        return pd.Series(cum_list, index=group.index)
    else:
        # 普通组:正常执行cumsum
        return group['Value'].cumsum()

# 4. 应用分组逻辑得到结果
df['Expected Cumulative Sum'] = df.groupby('group_id').apply(custom_cumsum).reset_index(level=0, drop=True)

这种方法的优势是可以灵活修改reset_flag的生成规则,比如改成df['reset_flag'] = (df['Value'] == df['Original Cumulative Sum'].shift(1)).astype(int),就能自动识别需要重置的行。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 08:29:04