编写一个解决方案来查询分数的排名。排名按以下规则计算:
- 分数应按从高到低排列。
- 如果两个分数相等,那么两个分数的排名应该相同。
- 在排名相同的分数后,排名数应该是下一个连续的整数。换句话说,排名之间不应该有空缺的数字。
按 score 降序返回结果表。
查询结果格式如下所示。
import pandas as pd
def order_scores(scores: pd.DataFrame) -> pd.DataFrame:
scores['rank'] = scores['score'].rank( method='dense',ascending=False)
scores.sort_values('score',ascending=False,inplace=True)
scores['rank'] = scores['rank'].astype(int)
return scores[['score','rank']]
注意
pd.rank()
Series.rank(axis=0, method='average', numeric_only=None, na_option='keep', ascending=True, pct=False)
DataFrame.rank(axis=0, method='average', numeric_only=None, na_option='keep', ascending=True, pct=False)
method=‘dense’
在 Pandas 的 .rank() 方法中,method=‘dense’ 是一种处理相等值的排名方式。与其他排名方法相比,它会为相等的值分配相同的排名,但后续排名紧接前一排名,而不会跳跃。
特点
对于相等的值分配相同的排名。
后续排名是连续的,而不是跳跃式的。
import pandas as pd
# 创建 Series
scores['rank'] = scores['score'].rank( ascending=False)
scores['rank'] = scores['score'].rank(method='dense',ascending=False)