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

如何在Pandas DataFrame中按连续重复组生成计数新列?

实现连续重复值的序号标记(Pandas)

原始数据

import pandas as pd
df = pd.DataFrame({'data': [0,0,0,1,1,1,2,2,2,3,3,4,4,5,5,0,0,0,0,2,2,2,2,4,4,4,4]})

数据预览:

data
0      0
1      0
2      0
3      1
4      1
5      1
6      2
7      2
8      2
9      3
10     3
11     4
12     4
13     5
14     5
15     0
16     0
17     0
18     0
19     2
20     2
21     2
22     2
23     4
24     4
25     4
26     4

需求说明

新增一列new,标记同一连续重复的data值的出现次数,最终输出如下:

data  new
0      0    1
1      0    2
2      0    3
3      1    1
4      1    2
5      1    3
6      2    1
7      2    2
8      2    3
9      3    1
10     3    2
11     4    1
12     4    2
13     5    1
14     5    2
15     0    1
16     0    2
17     0    3
18     0    4
19     2    1
20     2    2
21     2    3
22     2    4
23     4    1
24     4    2
25     4    3
26     4    4

简便实现方法

不需要转成Python列表循环,直接用Pandas内置方法就能高效实现:

方法1:分步实现(清晰易懂)

  1. 先标记连续重复的分组:当当前行data与上一行不同时,分组ID递增
  2. 对每个分组内的行进行计数,加1得到从1开始的序号
# 生成分组标识
df['group'] = (df['data'] != df['data'].shift()).cumsum()
# 分组内计数并加1
df['new'] = df.groupby('group').cumcount() + 1
# 可选:删除临时分组列
df = df.drop('group', axis=1)

方法2:一行代码简化

把分组和计数逻辑合并,无需临时列:

df['new'] = df.groupby((df['data'] != df['data'].shift()).cumsum()).cumcount() + 1

这种方法利用Pandas的向量化操作,比循环列表的方式效率更高,尤其适合处理大规模数据集。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 03:55:15