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
相关产品推荐
相关产品推荐

