python - 对 Pandas 中的一列进行分组并根据另一列进行降序排列

标签 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

最佳答案

方法='密集'

默认排名使用平均值来解决平局问题。 A组中,Oscar和Frank得分相同,与第4和第5名有关。在'average'逻辑下,都设置为4.5:(4+5)/2,并且只要与它没有联系,下一个值就排在第 6 位,詹姆斯就是这种情况。对于 'dense',关系的排名较低(在本例中为 4),然后下一个不同值继续排名 5。

df['rank'] = df.groupby(['class'])['score'].rank(method='dense').astype(int)

    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

关于python - 对 Pandas 中的一列进行分组并根据另一列进行降序排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57619147/

相关文章:

python - 如何比较两个数据帧并过滤发现差异的行和列

python - 如何从日期时间戳列中每 5 分钟取数据框中一列的平均值?

python - 使用 WSDiscovery 从服务列表中获取特定字符串

python - 如何展平嵌套的 python 字典?

python - 无法使用请求解析网页的确切结果

python - 从数据框 Pandas 中获取单个值

python - 无法将时间对象转换为 datetime64[ns]

python - 如何将自定义函数应用于pandas数据框的每一行

python - 在 Python 中跨列应用多个函数(均值、STD 等)

python - Django CSRF 验证失败。网络钩子(Hook)支付系统