【发布时间】: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'? -
作品,请随意放弃代表支付的答案。