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

Python pandas中如何实现序列中断时自动重置的cumcount累计计数?

pandas连续相同值分组累计计数实现方法

你原来使用的df.groupby(["col_1"]).cumcount()是将所有col_1取值相同的行归为同一组做累计计数,不会区分值是否连续出现,因此最后一行a的计数为2,不符合需求。

实现代码

import pandas as pd

# 构造示例数据
data = { 'col_1': ['a', 'a', 'b', 'b', 'a'], 'col_2': [3, 2, 1, 0, -3]}
df = pd.DataFrame.from_dict(data)

# 生成连续相同值的分组标识:值变化时分组id+1
df['group_id'] = (df['col_1'] != df['col_1'].shift()).cumsum()
# 按连续分组+列值分组后累计计数
df['seq'] = df.groupby(['group_id', 'col_1']).cumcount()
# 可删除临时生成的group_id列
df.drop('group_id', axis=1, inplace=True)

输出结果

执行后df的输出如下,符合预期:

col_1  col_2  seq
0     a      3    0
1     a      2    1
2     b      1    0
3     b      0    1
4     a     -3    0

实现原理

  • 用df['col_1'].shift()获取上一行的col_1值,和当前行比较得到布尔序列,值变化时返回True
  • 对布尔序列做cumsum()累加(True按1计算),得到连续相同值的唯一分组id
  • 联合分组id和col_1做groupby,此时每个分组内都是连续出现的相同值,调用cumcount()即可实现打断后重置计数的效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 20:18:02