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

在Pandas中计算status列连续零值序列的长度

按分组填充连续零值序列长度到DataFrame的gap列

给定如下结构的DataFrame:

Unitstatusdate
One11
One12
One13
One04
One05
One16
One17

需要新增gap列,规则为:

  • 连续零值序列的所有行填充该序列的总长度
  • 非零值行填充0

最终输出示例:

Unitstatusdategap
One110
One120
One130
One042
One052
One160
One170

要求对所有Unit分组执行该操作。


解决方案

通过Pandas的分组(groupby)和变换(transform)方法实现,核心是先标记出每个连续零值的序列组,再将组的长度广播到组内所有行:

import pandas as pd

# 构造示例DataFrame
df = pd.DataFrame({
    'Unit': ['One']*7,
    'status': [1,1,1,0,0,1,1],
    'date': [1,2,3,4,5,6,7]
})

# 1. 生成分组标识:按Unit分组,同时用非零值的累加标记连续零值的子组
group_key = ['Unit', (df['status'] != 0).cumsum()]

# 2. 计算子组长度,仅保留零值行的长度,非零行设为0
df['gap'] = df.groupby(group_key)['status'].transform('size').where(df['status'] == 0, 0)

print(df)

关键逻辑说明

  • (df['status'] != 0).cumsum():非零值会触发累加计数,连续零值会继承前一个非零段的计数,从而把所有连续零值归为同一子组
  • groupby(group_key).transform('size'):计算每个子组的行数(即连续零值的序列长度),并将该值广播到组内每一行
  • where(df['status'] == 0, 0):筛选出零值行保留组长度,非零行直接替换为0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 20:45:47