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

如何在Pandas DataFrame中为唯一ID添加排序后的累计序号列?

解决方法

你的问题在于cumcount()是对每个ID组内的行进行顺序计数(从0开始),而你需要的是给每个唯一ID分配一个全局递增的序号(同一个ID的所有行对应同一个序号)。以下是两种正确实现方式:

方法1:使用pd.factorize()

factorize()会将唯一的ID值映射为从0开始的整数,加1后得到从1开始的递增计数:

import pandas as pd

data = {'ID':[29951,29952,29953,29951,29951],'DESCRIPTION':['IPHONE 15','SAMSUNG S40','MOTOROLA G1000','IPHONE 15','IPHONE 15'],'PRICE_PROVIDER1':[1000.00,1200.00,1100.00,1000.00,1000.00]}
df = pd.DataFrame(data)

# 添加全局唯一ID的递增计数列
df['cnt'] = pd.factorize(df['ID'])[0] + 1
print(df)

输出结果:

ID      DESCRIPTION  PRICE_PROVIDER1  cnt
0  29951        IPHONE 15           1000.0    1
1  29952       SAMSUNG S40           1200.0    2
2  29953  MOTOROLA G1000           1100.0    3
3  29951        IPHONE 15           1000.0    1
4  29951        IPHONE 15           1000.0    1

方法2:使用groupby.ngroup()

ngroup()会给每个唯一的分组分配一个从0开始的序号,同样加1得到从1开始的计数:

df['cnt'] = df.groupby('ID').ngroup() + 1

执行后得到的结果和方法1完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 15:07:14