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

如何为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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 20:45:31