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['rank']=df['HP'].rank(ascending=False,method='dense')df
看起来像:
HP N-D unit rank0 24 C1 UD 1.01 24 C2 UD 1.02 24 C3 UD 1.03 7 Q1 UC 2.04 7 Q2 UC 2.05 7 Q3 UC 2.06 7 D1 UA 2.07 7 D2 UA 2.08 7 D3 UA 2.09 5 E1 UB 3.010 5 E2 UB 3.011 5 E3 UB 3.0
‘HP’是基于其他列的计算列(我不会在这里显示,但它在我的真实数据集中是必要的)
我也尝试了方法=’min’但结果如下:
HP N-D unit rank0 24 C1 UD 1.01 24 C2 UD 1.02 24 C3 UD 1.03 7 Q1 UC 4.04 7 Q2 UC 4.05 7 Q3 UC 4.06 7 D1 UA 4.07 7 D2 UA 4.08 7 D3 UA 4.09 5 E1 UB 10.010 5 E2 UB 10.011 5 E3 UB 10.0
单位’UC’和’UA’并列第二等级,我正在寻找的是下一个等级,单位’UB’为’4’而不是’3′. :
HP N-D unit rank0 24 C1 UD 1.01 24 C2 UD 1.02 24 C3 UD 1.03 7 Q1 UC 2.04 7 Q2 UC 2.05 7 Q3 UC 2.06 7 D1 UA 2.07 7 D2 UA 2.08 7 D3 UA 2.09 5 E1 UB 4.010 5 E2 UB 4.011 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-D0 24 UD 1.0 C11 24 UD 1.0 C22 24 UD 1.0 C33 7 UC 2.0 Q14 7 UC 2.0 Q25 7 UC 2.0 Q36 7 UA 2.0 D17 7 UA 2.0 D28 7 UA 2.0 D39 5 UB 4.0 E110 5 UB 4.0 E211 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'))总结
以上是内存溢出为你收集整理的python – Pandas排名方法密集但跳过一个数字全部内容,希望文章能够帮你解决python – Pandas排名方法密集但跳过一个数字所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)