给出一个数据框:
import pandas as pd
df = pd.DataFrame([
{'class' : 'a', 'score' : 10},
{'class' : 'a', 'score' : 30},
{'class' : 'a', 'score' : 20},
{'class' : 'b', 'score' : 15},
{'class' : 'b', 'score' : 25},
{'class' : 'b', 'score' : 35},])
class score
0 a 10
1 a 30
2 a 20
3 b 15
4 b 25
5 b 35
我正在尝试创建一个新列rank
,该列是该类中值的等级。因此结果将是:
class score rank
0 a 10 3
1 a 30 1
2 a 20 2
3 b 15 3
4 b 25 2
5 b 35 1
这样做的最佳方法是什么?使用apply
还是pd
本机函数?
答案 0 :(得分:3)
您可以首先在class
列中groupby使用数据框,然后使用Series.rank获得score
列的排名。
df['rank'] = df.groupby(['class'], sort=False)['score'].rank(ascending=False)