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

基于Python Pandas为时序DataFrame实现两种条件计数器需求

场景1 实现方案

逻辑说明

  • counter1:连续出现的0的累积计数,遇到1则重置为0,累计到3后保持3直到遇到1重置
  • counter2:当counter1<3时,无论case1-0是0还是1都持续递增计数;当counter1达到3时,重置为1重新开始计数

代码实现

import pandas as pd

# 构建示例DataFrame
df1 = pd.DataFrame({
    'case1-0': [1,1,1,0,0,0,1,1,0,0,1]
})

# 计算counter1:分组统计连续0的累积和,超过3则截断为3
group1 = (df1['case1-0'] == 1).cumsum()
df1['counter1'] = df1.groupby(group1)['case1-0'].apply(lambda x: (x == 0).cumsum()).clip(upper=3)

# 计算counter2:按counter1=3的重置点分组,每组内从1开始递增计数
reset_points = df1['counter1'] == 3
reset_groups = reset_points.cumsum()
df1['counter2'] = df1.groupby(reset_groups).cumcount() + 1

场景2 实现方案

逻辑说明

  • counter1:连续出现的1的累积计数,遇到0则重置为0
  • counter2:仅当前一行的counter1>3时,统计连续0的数量;其他情况为0

代码实现

# 构建示例DataFrame
df2 = pd.DataFrame({
    'case1-0': [1,1,1,1,0,0,0,1,1,0,0,1]
})

# 计算counter1:分组统计连续1的累积和
group2 = (df2['case1-0'] == 0).cumsum()
df2['counter1'] = df2.groupby(group2)['case1-0'].cumsum()

# 计算counter2:仅对符合条件的连续0计数,全程向量化操作高效处理大数据
valid_0 = (df2['case1-0'] == 0) & (df2['counter1'].shift(1) > 3)
valid_groups = valid_0.cumsum() - valid_0.cumsum().where(~valid_0).ffill().fillna(0)
df2['counter2'] = valid_groups.groupby(valid_groups).cumcount() + 1
df2['counter2'] = df2['counter2'].where(valid_0, 0)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 23:01:14