python – Pandas排名方法密集但跳过一个数字
发布时间:2020-12-20 12:13:39 所属栏目:Python 来源:网络整理
导读:我有一个示例数据集,我正在尝试根据“HP”列中的值进行排名: import pandas as pdd = { 'unit': ['UD','UD','UC','UA','UB','UB'],'N-D': [ 'C1','C2','C3','Q1','Q2','Q3','D1','D2','D3','E1','E2','E3'],'HP': [24,24,7,5,5]}df = pd.DataFrame(d)df['ra
我有一个示例数据集,我正在尝试根据“HP”列中的值进行排名:
import pandas as pd d = { 'unit': ['UD','UD','UC','UA','UB','UB'],'N-D': [ 'C1','C2','C3','Q1','Q2','Q3','D1','D2','D3','E1','E2','E3'],'HP': [24,24,7,5,5] } df = pd.DataFrame(d) df['rank']=df['HP'].rank(ascending=False,method='dense') df 看起来像: HP N-D unit rank 0 24 C1 UD 1.0 1 24 C2 UD 1.0 2 24 C3 UD 1.0 3 7 Q1 UC 2.0 4 7 Q2 UC 2.0 5 7 Q3 UC 2.0 6 7 D1 UA 2.0 7 7 D2 UA 2.0 8 7 D3 UA 2.0 9 5 E1 UB 3.0 10 5 E2 UB 3.0 11 5 E3 UB 3.0 ‘HP’是基于其他列的计算列(我不会在这里显示,但它在我的真实数据集中是必要的) 我也尝试了方法=’min’但结果如下: HP N-D unit rank 0 24 C1 UD 1.0 1 24 C2 UD 1.0 2 24 C3 UD 1.0 3 7 Q1 UC 4.0 4 7 Q2 UC 4.0 5 7 Q3 UC 4.0 6 7 D1 UA 4.0 7 7 D2 UA 4.0 8 7 D3 UA 4.0 9 5 E1 UB 10.0 10 5 E2 UB 10.0 11 5 E3 UB 10.0 单位’UC’和’UA’并列第二等级,我正在寻找的是下一个等级,单位’UB’为’4’而不是’3′. : HP N-D unit rank 0 24 C1 UD 1.0 1 24 C2 UD 1.0 2 24 C3 UD 1.0 3 7 Q1 UC 2.0 4 7 Q2 UC 2.0 5 7 Q3 UC 2.0 6 7 D1 UA 2.0 7 7 D2 UA 2.0 8 7 D3 UA 2.0 9 5 E1 UB 4.0 10 5 E2 UB 4.0 11 5 E3 UB 4.0 解决方法
一种选择是首先删除重复项来计算排名:
temp = df[['HP','unit']].drop_duplicates() temp.assign(rank=temp['HP'].rank(method='min',ascending=False)).merge(df) Out[48]: HP unit rank N-D 0 24 UD 1.0 C1 1 24 UD 1.0 C2 2 24 UD 1.0 C3 3 7 UC 2.0 Q1 4 7 UC 2.0 Q2 5 7 UC 2.0 Q3 6 7 UA 2.0 D1 7 7 UA 2.0 D2 8 7 UA 2.0 D3 9 5 UB 4.0 E1 10 5 UB 4.0 E2 11 5 UB 4.0 E3 添加(antonvbr)稍加修改直接分配: df['rank']= (df[['HP','unit']].drop_duplicates()['HP'] .rank(method='min',ascending=False) .reindex(range(len(df)),method='pad')) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |