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

如何在Pandas DataFrame中生成按零重置的1值cumsum列

如何在Pandas DataFrame中生成按零重置的1值cumsum列

嘿,这个需求我之前处理序列数据时也碰到过,用Pandas的分组累加就能完美解决,我一步步给你拆解实现过程:

首先先把你提供的原始数据代码放出来,方便复现:

import pandas as pd

df = pd.DataFrame([0,0,1,1,0,0,1,1,1,1,0,0,1,1,1,0,1,1], columns = ['A'])

核心思路

我们需要把连续的0或1的区块分成不同的组,对每个组里的1进行累加,0的组直接保持0。关键是先生成一个分组键,用来标记每个连续相同值的区块。

具体实现代码

# 生成分组键:当当前行A的值和上一行不同时,分组键加1
group_key = df['A'].ne(df['A'].shift()).cumsum()

# 按分组键分组后对A列做累加,自动实现0区块保持0,1区块从1开始递增
df['B'] = df.groupby(group_key)['A'].cumsum()

运行之后,打印df就能得到预期结果:

A  B
0   0  0
1   0  0
2   1  1
3   1  2
4   0  0
5   0  0
6   1  1
7   1  2
8   1  3
9   1  4
10  0  0
11  0  0
12  1  1
13  1  2
14  1  3
15  0  0
16  1  1
17  1  2

代码解释

  • df['A'].ne(df['A'].shift()):生成一个布尔序列,当当前行的A值和上一行不同时返回True,否则False——比如从0变1或者1变0的时候,这里就会触发True。
  • .cumsum():对这个布尔序列做累加,True会被当作1处理,False当作0,这样每次遇到值变化时,分组键就会加1,把连续相同值的行归为同一个组。
  • 最后分组后对A列做累加:0的组累加结果始终是0,1的组会从1开始依次递增,正好满足你“遇到0就重置累加”的需求。

如果你喜欢更简洁的写法,也可以把两行合并成一行:

df['B'] = df.groupby(df['A'].ne(df['A'].shift()).cumsum())['A'].cumsum()

备注:内容来源于stack exchange,提问作者Sun Jar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 12:13:11