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

目录

1. 题目描述

2. 题目解析

3. 代码实现

4. 代码分析

步骤一:使用 rank(method='dense') 计算排名

步骤二:格式化输出

5. Pandas 核心函数知识点总结


1. 题目描述

力扣链接:178. 分数排名 - 力扣(LeetCode)

2. 题目解析

核心要求:

  1. 分数降序排列:排名应从高到低计算。
  2. 同分同级(Ties):如果两个分数相等,它们的排名必须相同。
  3. 排名连续(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)

这一步是为了满足题目对输出格式和顺序的要求:

  1. scores[['score', 'rank']]:选取并返回包含 score 和 rank 两列的 DataFrame,其他列(如 id)被丢弃。
  2. .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

posted @ 2025-10-31 17:15  gccbuaa  阅读(8)  评论(0)    收藏  举报