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

Pandas如何在分组内为重复记录分配唯一ID

pandas分组按列生成连续递增ID实现方案

需求说明

现有如下结构的DataFrame:

import pandas as pd
df = pd.DataFrame({'type': ['A', 'A', 'A', 'B', 'B', 'B', 'B', 'B','C','C','C','D','D'],
                   'value': [1, 1, 2, 3, 4, 5, 5, 5, 6, 6, 7, 7, 8],
                  })

需要按type字段分组,组内相同value的记录分配相同ID,不同value分配从1开始顺序递增的ID,最终输出效果如下:

type  value  id
0     A      1   1
1     A      1   1
2     A      2   2
3     B      3   1
4     B      4   2
5     B      5   3
6     B      5   3
7     B      5   3
8     C      6   1
9     C      6   1
10    C      7   2
11    D      7   1
12    D      8   2

实现代码

写法1:按value值大小编号(适合数值排序场景)

用rank的dense模式,组内相同值排名一致,不同值按数值大小连续编号:

df['id'] = df.groupby('type')['value'].rank(method='dense').astype(int)

写法2:按value首次出现顺序编号(适合保序场景)

用factorize对组内值做顺序编码,严格按值第一次出现的顺序分配ID:

df['id'] = df.groupby('type')['value'].transform(lambda x: x.factorize()[0] + 1)

两种写法在示例数据中运行结果完全一致,都能得到预期输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 09:36:25