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

如何统计Pandas数据框中列标识触发后无零值间隔的累计天数

实现方案

直接通过分组累计计数即可满足需求,完整代码如下:

import pandas as pd
df = pd.DataFrame({'input': [1,1,1,0,0,0,1,1,1,0,0,0]}, 
                  index=pd.date_range('2021-10-01', periods=12))
# 标记input从1变为0的触发点
df['change'] = 0
df.loc[(df['input'].shift(1) - df['input']) > 0, 'change'] = 1

# 核心逻辑:生成分组ID + 分组内累计计数
df['group_id'] = df['change'].cumsum()
df['res'] = df.groupby('group_id').cumcount() + 1
# 把第一个触发点之前的行结果置为0
df.loc[df['group_id'] == 0, 'res'] = 0
# 可选:删除辅助列group_id
df = df.drop('group_id', axis=1)

print(df)

运行后输出和预期完全一致:

input  change  res
2021-10-01      1       0    0
2021-10-02      1       0    0
2021-10-03      1       0    0
2021-10-04      0       1    1
2021-10-05      0       0    2
2021-10-06      0       0    3
2021-10-07      1       0    4
2021-10-08      1       0    5
2021-10-09      1       0    6
2021-10-10      0       1    1
2021-10-11      0       0    2
2021-10-12      0       0    3

逻辑说明

  • df['change'].cumsum() 会在每次触发change=1时生成新的分组ID,同一计数周期内的行都会被分到同一个组
  • groupby('group_id').cumcount() + 1 实现每个分组内从1开始的逐行累计计数
  • 第一个分组(group_id=0)对应还没有触发过变更的周期,直接把该分组的res统一置为0即可符合要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 02:54:08