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

在DataFrame中统计连续1的次数,遇0重置并记录总数

解决DataFrame中连续1的计数并在对应0行填充的问题

不用嵌套shift()和复杂条件判断,用pandas的分组功能就能简洁高效实现需求,核心思路是基于0的位置划分分组,统计每组内1的总数后,仅在0所在行填充该计数:

步骤实现

  1. 构造示例数据
import pandas as pd

df = pd.DataFrame({'A': [0,1,1,1,1,0,0,1,1,0]})
  1. 生成分组标识
    以0为分界点,通过累加生成分组ID,让连续的1块与后续第一个0归为同一组:
group_key = (df['A'] == 0).cumsum()
  1. 统计分组内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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 19:35:19