基于多列优先级的DataFrame排名列实现(含同分规则)
多条件排名实现方案
原始数据
import pandas as pd df = pd.DataFrame({ "DScore": [2, 2, 3, 4, 5], "EScore": [6, 7, 9, 9, 10], "Total Score": [17, 15, 15, 23, 25] })
排名规则
- 优先按
Total Score降序排序排名 Total Score相同时,按EScore降序判断EScore仍相同时,按DScore降序判断- 三者完全相同时,分配相同排名
预期输出
df = pd.DataFrame({ "DScore": [2, 2, 4, 4, 5], "EScore": [6, 7, 9, 9, 10], "Total Score": [17, 15, 23, 23, 25], "Rank": [3,4,2,2,1] })
实现代码
利用pandas的rank()方法,指定多列排序依据,设置降序和method='min'来保证相同值获得相同排名:
# 按规则排序(可选,用于对齐预期输出的行顺序) df = df.sort_values(by=['Total Score', 'EScore', 'DScore'], ascending=False) # 生成排名列并转为整数类型 df['Rank'] = df.rank(by=['Total Score', 'EScore', 'DScore'], ascending=False, method='min').astype(int) # 查看最终结果 print(df)
执行后将得到与预期一致的排名结果:
Total Score=25的行排名第1- 两个
Total Score=23的行共同排名第2 Total Score=17的行排名第3Total Score=15的行排名第4
内容的提问来源于stack exchange,提问作者Michał Surdej
相关产品推荐
相关产品推荐

