Pandas如何基于score列计算分组内排名并新增rank列
Pandas 实现分组内按分数排名
要实现按group分组、组内按score降序排名的需求,可直接参考以下代码:
完整可运行代码
import pandas as pd # 构造示例数据,实际使用时替换为你自己的数据集读取逻辑即可 df = pd.DataFrame({ 'group': [1, 1, 1, 2, 2, 2, 3, 3, 3], 'name': ['p2382', 'p9183', 'p1253', 'p3382', 'p5583', 'p1211', 'p0482', 'p7374', 'p2382'], 'score': [7.55, 3.22, 5.77, 2.11, 1.22, 0.77, 8.55, 8.21, 7.77] }) # 新增rank列:按group分组,组内score越高排名越靠前,排名转为整数格式 df['rank'] = df.groupby('group')['score'].rank(ascending=False, method='min').astype(int) # 按group、rank升序排序,得到最终结果 df = df.sort_values(by=['group', 'rank'], ignore_index=True) print(df)
参数说明
ascending=False:设置为降序排名,保证分数越高排名越靠前method='min':相同分数的记录排名一致,如果你需要同分按出现顺序先后排名,可以替换为method='first'astype(int):rank方法默认返回浮点型结果,转换为整数符合预期的排名展示格式
输出结果
运行后得到的df和你要求的预期结果完全一致:
| group | name | score | rank |
|---|---|---|---|
| 1 | p2382 | 7.55 | 1 |
| 1 | p1253 | 5.77 | 2 |
| 1 | p9183 | 3.22 | 3 |
| 2 | p3382 | 2.11 | 1 |
| 2 | p5583 | 1.22 | 2 |
| 2 | p1211 | 0.77 | 3 |
| 3 | p0482 | 8.55 | 1 |
| 3 | p7374 | 8.21 | 2 |
| 3 | p2382 | 7.77 | 3 |
内容的提问来源于stack exchange,提问作者Algorithmatic
相关产品推荐
相关产品推荐

