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

如何对周期性数据按组用cumsum/cumcount实现循环计数重置?

解决Pandas中按ID和连续状态周期重置计数的问题

要实现每个ID下连续相同SWITCH状态的周期内计数重置,核心是先识别每个ID内的状态变化边界,生成独立的周期分组,再在每个周期内进行计数。

具体实现步骤:

  1. 按ID分组,标记每个分组内SWITCH状态发生变化的行
  2. 对状态变化标记做累加,得到每个连续状态周期的唯一标识
  3. 按ID和周期标识分组,使用cumcount()生成周期内的递增计数(加1让计数从1开始)

代码示例:

假设你的DataFrame名为df,执行以下代码:

import pandas as pd

# 生成状态变化标记:当前行与上一行SWITCH不同则为True,否则False
df['状态变化'] = df.groupby('ID')['SWITCH'].diff() != 0

# 累加状态变化标记,得到每个连续状态的周期编号(同一周期内编号相同)
df['周期编号'] = df.groupby('ID')['状态变化'].cumsum().fillna(0).astype(int)

# 按ID和周期编号分组,生成周期内计数
df['周期内计数'] = df.groupby(['ID', '周期编号']).cumcount() + 1

# 可删除中间辅助列,保留目标结果
df = df.drop(['状态变化', '周期编号'], axis=1)

关键逻辑说明:

  • groupby('ID')['SWITCH'].diff():计算每个ID内当前行与上一行的SWITCH差值,不同状态时返回非0值,相同则为0
  • cumsum():对状态变化标记累加,每遇到一次状态变化,周期编号就加1,确保同一连续状态的行拥有相同的周期编号
  • cumcount() +1:在每个ID+周期编号的分组内生成从0开始的计数,加1后转为从1开始的递增序列

内容的提问来源于stack exchange,提问作者Whiskey Mental Disturb

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 17:30:41