在DataFrame中统计连续1的次数,遇0重置并记录总数
解决DataFrame中连续1的计数并在对应0行填充的问题
不用嵌套shift()和复杂条件判断,用pandas的分组功能就能简洁高效实现需求,核心思路是基于0的位置划分分组,统计每组内1的总数后,仅在0所在行填充该计数:
步骤实现
- 构造示例数据
import pandas as pd df = pd.DataFrame({'A': [0,1,1,1,1,0,0,1,1,0]})
- 生成分组标识
以0为分界点,通过累加生成分组ID,让连续的1块与后续第一个0归为同一组:
group_key = (df['A'] == 0).cumsum()
- 统计分组内1的数量并赋值到B列
筛选出A列值为0的行,将对应分组的1的总数填充到B列,其余行保持0:
df['B'] = 0 mask = df['A'] == 0 df.loc[mask, 'B'] = df.loc[mask, 'A'].groupby(group_key).transform('sum')
最终输出
执行代码后得到的结果完全符合预期:
A B 0 0 0 1 1 0 2 1 0 3 1 0 4 1 0 5 0 4 6 0 0 7 1 0 8 1 0 9 0 2
逻辑说明
group_key的生成逻辑:每遇到一个0,分组ID就加1,这样连续的1序列和后续第一个0会被划进同一分组- 对每个分组统计A列的和(也就是该组内1的总数),仅在0所在行将这个数值填充到B列,其余行默认设为0
内容的提问来源于stack exchange,提问作者Markus
相关产品推荐
相关产品推荐

