对于以下示例数据框,我正在grouby class
上工作,并递减对score
的排名。
stu_id class name score
0 1 A Jack 45
1 2 A Oscar 75
2 3 B Emile 60
3 4 B Sophie 64
4 5 B Jim 85
5 6 A Thomas 55
6 7 A David 60
7 8 B Lee 60
8 9 B Elvis 70
9 10 A Frank 75
10 11 A James 90
我尝试过:
df['rank'] = df.groupby(['class'])['score'].rank(ascending=True)
df
结果:
stu_id class name score rank
0 1 A Jack 45 1.0
1 2 A Oscar 75 4.5
2 3 B Emile 60 1.5
3 4 B Sophie 64 3.0
4 5 B Jim 85 5.0
5 6 A Thomas 55 2.0
6 7 A David 60 3.0
7 8 B Lee 60 1.5
8 9 B Elvis 70 4.0
9 10 A Frank 75 4.5
10 11 A James 90 6.0
但是我的预期输出应该是这样的,为什么我的代码无法工作?谢谢。
stu_id class name score rank
0 1 A Jack 45 1
1 2 A Oscar 75 4
2 3 B Emile 60 1
3 4 B Sophie 64 2
4 5 B Jim 85 4
5 6 A Thomas 55 2
6 7 A David 60 3
7 8 B Lee 60 1
8 9 B Elvis 70 3
9 10 A Frank 75 4
10 11 A James 90 5
答案 0 :(得分:1)
origin/master
默认排名使用method='dense'
来解决平局。在A组中,奥斯卡和弗兰克共享相同的分数,与等级4和5有关。在average
逻辑下,两者均设置为4.5:(4 + 5)/ 2,下一个值排名6只要没有关系,詹姆斯就是这种情况。使用'average'
,关系被赋予较低的等级(在这种情况下为'dense'
),然后下一个不同的值将等级继续保持在5。
4