在pandas中,如何根据另一列的值区分两个相等的等级? [重复]

问题描述 投票:0回答:1

我有一个数据框

df:

索引 A 排名
1 55 27 1.0
2 62 15 2.5
3 76 15 2.5
4 85 04 4.0

'Rank'
列是通过按降序排列
'B'
创建的。与:

 df['Rank'] = df['B'].rank(ascending = False)

2
3
行中分配的等级相同。每当有相同的排名分配给两个不同的行时,我想通过按降序使用列
'A'
的值来打破平局,以便包含较高
'A'
值的行获得较低的排名。

期望的输出:

索引 A 排名
1 55 27 1.0
2 62 15 3.0
3 76 15 2.0
4 85 04 4.0

编辑: 我想先按

'B'
对其进行排名,然后仅使用
'A'
来决定相同排名的元素,这样所有其他排名仍然仅由
'B'
决定。

python pandas dataframe ranking
1个回答
0
投票

使用

sort_values
的一个选项:

order = df.sort_values(by=['B', 'A'], ascending=[False, False]).index

df.loc[order, 'Rank'] = np.arange(len(df))+1

结合

rank
的变体:

df['Rank'] = (df.sort_values(by=['B', 'A'], ascending=[False, False])['B']
                .rank(method='first', ascending=False)
             )

输出:

   Index   A   B  Rank
0      1  55  27     1
1      2  62  15     3
2      3  76  15     2
3      4  85   4     4
© www.soinside.com 2019 - 2024. All rights reserved.