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

如何统计Pandas DataFrame中input列从1变为0后的累计天数

解决方案

你可以通过给连续0序列分组+组内计数的方式实现需求,核心是用eq(1).cumsum()生成分组标识,把每一段连续的0划分到同一个分组,再对组内做计数即可,完整代码如下:

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))
# 一行代码生成res列,不需要提前计算change列也可以实现
df['res'] = df.groupby(df['input'].eq(1).cumsum()).cumcount().add(1).where(df['input'].eq(0), 0)
print(df)

运行后输出和你要求的效果完全一致:

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

逻辑说明

  • df['input'].eq(1).cumsum():每次遇到input=1时累计值加1,相当于给每一段连续的0分配了唯一的分组ID,比如示例里前三行1对应分组ID1,接下来三行0也属于分组ID1,再三行1对应分组ID2,最后三行0属于分组ID2。
  • groupby(分组ID).cumcount().add(1):对每个分组内的行按顺序生成从1开始的序号,连续0段的序号正好就是从1开始的天数。
  • where(df['input'].eq(0), 0):把input=1的行的计数结果替换为0,符合需求。

如果你已经提前生成了change列,也可以用类似逻辑实现,上面的写法更简洁,不需要额外依赖change列。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 09:15:02