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

在Pandas DataFrame中基于连续值分组创建并分配序列编号

Pandas实现连续相同值分组编号

原始DataFrame:

import pandas as pd

d = pd.DataFrame({'0': ['A', 'A', 'A', 'D', 'D', 'A', 'D', 'A', 'D', 'A', 'D']})

输出:

0
0   A
1   A
2   A
3   D
4   D
5   A
6   D
7   A
8   D
9   A
10  D

目标是生成包含序列编号的DataFrame,要求连续相同值分配同一编号,值切换时编号递增:

0   1
0   A   1
1   A   1
2   A   1
3   D   2
4   D   2
5   A   3
6   D   4
7   A   5
8   D   6
9   A   7
10  D   8

你之前尝试的代码问题在于按值分组后累加,这会导致同一值的不同连续组共享计数,无法正确区分切换后的新组。正确的做法是直接对值切换的标记做累加,不需要分组:

# 标记值发生切换的位置(第一行默认是切换,因为没有前一个值)
diff = d['0'].ne(d['0'].shift())
# 对切换标记做累加,得到连续组的编号
d['1'] = diff.cumsum()

执行后就能得到预期的结果:

0  1
0   A  1
1   A  1
2   A  1
3   D  2
4   D  2
5   A  3
6   D  4
7   A  5
8   D  6
9   A  7
10  D  8

原理说明:ne(d['0'].shift())会生成一个布尔序列,当当前值和前一行不同时为True(第一行因为shift()后是NaN,所以ne()结果为True)。对这个布尔序列做cumsum(),True会被当作1累加,False当作0,这样每次值切换时计数就会加1,正好对应连续相同值的分组编号。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 05:05:19