加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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'))

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读