Groupby并根据熊猫的另一列降序排列其一列

时间:2019-08-23 02:29:20

标签: python pandas

对于以下示例数据框,我正在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

1 个答案:

答案 0 :(得分:1)

origin/master

默认排名使用method='dense'来解决平局。在A组中,奥斯卡和弗兰克共享相同的分数,与等级4和5有关。在average逻辑下,两者均设置为4.5:(4 + 5)/ 2,下一个值排名6只要没有关系,詹姆斯就是这种情况。使用'average',关系被赋予较低的等级(在这种情况下为'dense'),然后下一个不同的值将等级继续保持在5。

4