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

