【问题标题】:Pandas rank accounting for duplicate (tied) scores熊猫排名占重复(并列)分数
【发布时间】:2021-09-02 01:30:48
【问题描述】:

假设我有比赛参与者的数据。列是 id 和 score。

import numpy as np
import pandas as pd
import random
d = {'id':list(range(10)), 
     'score':[10,10,8,8,8,5,4,3,2,1]}

df = pd.DataFrame(d)
df['rank'] = df['score'].rank(method='dense',ascending=False)

看起来像

    id  score   rank
0   0   10  1.0
1   1   10  1.0
2   2   8   2.0
3   3   8   2.0
4   4   8   2.0
5   5   5   3.0
6   6   4   4.0
7   7   3   5.0
8   8   2   6.0
9   9   1   7.0

这几乎是完美的。但是,在比赛中,如果两名参赛者并列第一,那么下一个名额将是第三名。 (但是,我们得到 2)。同样,如果以下 3 名参与者各得 8 分,则应分别排在第 3 位。以下数字 5 分数不相等,所以应该是 6,7,8,9,10。

如何实现这个效果? rank(method='dense') 让我走到了这一步,但pandas df.rank() 没有似乎有一个选项可以让我获得 100% 的解决方案。

【问题讨论】:

  • 使用method='min'?
  • 作品,请随意放弃代表支付的答案。

标签: python pandas rank


【解决方案1】:

来自 cmets,由 Michael 协助。

import numpy as np
import pandas as pd
import random
d = {'id':list(range(10)), 
     'score':[10,10,8,8,8,5,4,3,2,1]}

df = pd.DataFrame(d)
df['rank'] = df['score'].rank(method='min',ascending=False)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-15
    • 2012-06-19
    • 1970-01-01
    相关资源
    最近更新 更多