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

如何在Pandas/纯Python中实现遇到0时重置累计求和(cumsum)?

分段重置的累计求和实现方案

这是个非常实用的分段累计需求,我来分享两种靠谱的实现方式,分别适配Pandas场景和纯Python场景:

一、使用Pandas实现(高效简洁,推荐)

核心思路

我们可以先给每个分段生成唯一的分组标识:每当遇到值为0的元素时,就开启一个新的分组。然后对每个分组单独执行累计求和,这样就能实现遇到0就重置的效果。

代码示例

import pandas as pd

# 构造你提供的原始Series
orig = pd.Series([0,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1])

# 生成分组键:每出现一个0,分组编号+1,以此划分独立分段
group_keys = (orig == 0).cumsum()
# 按分组键分组后,对每个组执行累计求和
wanted_result = orig.groupby(group_keys).cumsum()

# 输出验证
print(wanted_result)

输出结果

0     0
1     1
2     2
3     3
4     4
5     5
6     6
7     7
8     0
9     1
10    2
11    3
12    0
13    1
14    2
15    3
16    4
17    5
18    6
dtype: int64

完全匹配你想要的结果,而且Pandas的内置方法处理大数据量时效率很高。

二、纯Python实现(无需依赖库,逻辑直观)

如果你的场景不能使用Pandas,写个简单的循环就能解决问题,逻辑非常清晰:

核心思路

遍历原始序列,维护一个当前累计值的变量:

  • 遇到0时,把当前累计值重置为0,直接加入结果列表
  • 遇到非0值时,把当前值加到累计变量里,再加入结果列表

代码示例

orig = [0,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1]
wanted_result = []
current_total = 0

for num in orig:
    if num == 0:
        current_total = 0
    else:
        current_total += num
    wanted_result.append(current_total)

print(wanted_result)

输出结果

[0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 0, 1, 2, 3, 4, 5, 6]

这个方法适合小数据量或者需要轻量实现的场景,可读性拉满。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 17:34:08