【Pandas练习100题】第002题:分数排名 - 教程

目录
步骤一:使用 rank(method='dense') 计算排名
1. 题目描述

2. 题目解析
核心要求:
- 分数降序排列:排名应从高到低计算。
- 同分同级(Ties):如果两个分数相等,它们的排名必须相同。
- 排名连续(Dense Rank):排名之间不应有空缺的数字。例如,如果有两个人并列第一(排名 1),下一个不同的分数的排名应该是 2,而不是 3。
这种“同分同级,排名连续”的规则,在 Pandas 中,有对应的 rank() 方法来实现这一目标。
3. 代码实现
def order_scores(scores: pd.DataFrame) -> pd.DataFrame:
# 核心步骤一:计算排名
scores['rank'] = scores['score'].rank(method='dense', ascending=False)
# 核心步骤二:按要求格式化和排序输出
return scores[['score', 'rank']].sort_values('score', ascending=False)
4. 代码分析
步骤一:使用 rank(method='dense')计算排名
scores['rank'] = scores['score'].rank(method='dense', ascending=False)
这是实现题目要求的核心:
- scores['score'].rank(...):对 DataFrame 的 score 列调用 rank 方法。
- method='dense':这是实现“排名连续,无空缺”的关键。Pandas 的 rank 方法有多种处理并列值(Ties)的方式,其中:
- 'dense':实现 密集排名,同分同级,下一个排名是连续整数。
- 'min':实现 最小排名,同分同级,但下一个排名会跳过数字(如 1, 1, 3)。
- ascending=False:指定排名应按 降序 计算,即分数越高,排名越靠前(数字越小)。
执行完毕后,一个新的名为 rank 的列被添加到原始 scores DataFrame 中,包含了正确计算出的排名。
步骤二:格式化输出
return scores[['score', 'rank']].sort_values('score', ascending=False)
这一步是为了满足题目对输出格式和顺序的要求:
- scores[['score', 'rank']]:选取并返回包含 score 和 rank 两列的 DataFrame,其他列(如 id)被丢弃。
- .sort_values('score', ascending=False):最终结果需要按照 score降序排列。虽然 rank 计算是基于降序的,但为了保证输出顺序和示例一致,进行显式的降序排序是必要的(因为原始 DataFrame 的顺序可能很随机)。
5. Pandas 核心函数知识点总结
Pandas 函数/参数 | 知识点 | 作用(在本题中) | 对应 SQL |
Series.rank() | Pandas 中用于计算数据排名的核心方法。 | 对 score 列计算排名。 | 通用的 RANK 窗口函数。 |
method='dense' | rank() 方法中处理并列值(Ties)的方式之一。 | 实现“同分同级,排名连续” 的要求。 | DENSE_RANK() |
ascending=False | 排序或排名计算的方向。 | 指定按 降序 计算排名(分数越高,排名数字越小)。 | ORDER BY score DESC |
DataFrame[['col1', 'col2']] | 使用列表进行列的选择(索引操作)。 | 仅保留 score 和 rank 列作为最终输出。 | SELECT score, rank |
DataFrame.sort_values() | 对 DataFrame 进行排序的方法。 | 确保最终的输出结果按照 score 降序排列。 | ORDER BY score DESC |

浙公网安备 33010602011771号