如何为DataFrame排序并生成同值共享排序序号的列?
解决DataFrame相同值共享排序序号的问题
你需要的是对相同数值分配连续且一致的排序序号,np.argsort返回的是元素在排序后的位置索引,无法满足需求。可以用以下两种简单方法实现:
方法1:使用rank方法
通过Series.rank配合method='dense'参数,让相同值获得连续的排名,再减去1将序号从0开始:
import pandas as pd df = pd.DataFrame({'YYYYMM':[202206,202207,202206,202209,202206,202207]}) # 生成从0开始的连续序号 df['ORDER'] = df['YYYYMM'].rank(method='dense').astype(int) - 1 print(df)
输出结果:
YYYYMM ORDER 0 202206 0 1 202207 1 2 202206 0 3 202209 2 4 202206 0 5 202207 1
方法2:使用factorize方法
factorize可以直接将唯一值映射为从0开始的整数,设置sort=True保证序号按数值大小排序:
import pandas as pd df = pd.DataFrame({'YYYYMM':[202206,202207,202206,202209,202206,202207]}) # 生成排序后的连续序号,_ 接收唯一值数组(可忽略) df['ORDER'], _ = pd.factorize(df['YYYYMM'], sort=True) print(df)
输出结果与方法1完全一致。
两种方法说明
rank(method='dense'):适合需要灵活调整排名规则的场景(比如还有method='first'按首次出现排名等)factorize(sort=True):更简洁高效,直接完成唯一值到连续整数的映射,默认按首次出现顺序,sort=True改为按数值大小排序
内容的提问来源于stack exchange,提问作者aukk123
相关产品推荐
相关产品推荐

