对于下面的示例数据帧,我在groubyclass
工作,并对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
method='dense'
默认排名使用
average
来解析关系。在A组中,Oscar和Frank的得分相同,与排名4和5相关。在'average'
逻辑下,两者都设置为4.5:(4+5)/2,下一个值是排名6,只要与之没有关联,James就是这样。使用'dense'
时,关系被赋予较低的排名(在本例中为4
),然后下一个不同的值继续排名在5相关问题 更多 >
编程相关推荐