pandas体育评分系统实现并列排名显示为X-Y区间格式的方案咨询
体育赛事评分系统同分区间排名实现方案
实现思路
核心逻辑是基于已排序的总分对选手分组,取每个同分分组的排名上下限拼接为区间格式,具体步骤如下:
- 先保留现有总分降序排序逻辑,给所有选手生成连续的初始排名
- 按总分字段分组,统计每个同分分组内的最小排名、最大排名
- 若分组内仅1名选手,排名直接显示数值;若有多名同分选手,排名拼接为「最小排名-最大排名」的字符串格式
- 清理生成排名过程中产生的临时字段即可
修改后的代码实现
你只需要替换原代码末尾生成排名的相关逻辑即可,完整修改段如下:
# 原有排序逻辑保留 df = df.sort_values(['Total Score'], ascending = False) df = df.reset_index(drop = True) # 生成初始连续排名 df['init_rank'] = np.arange(1, len(df) + 1) # 按总分分组计算同分区间上下限 df['rank_min'] = df.groupby('Total Score')['init_rank'].transform('min') df['rank_max'] = df.groupby('Total Score')['init_rank'].transform('max') # 生成最终排名 df['Ranking'] = np.where( df['rank_min'] == df['rank_max'], df['rank_min'].astype(str), df['rank_min'].astype(str) + '-' + df['rank_max'].astype(str) ) # 删除临时辅助列 df = df.drop(columns=['init_rank', 'rank_min', 'rank_max']) # 保留索引从1开始的逻辑 df.index = np.arange(1, len(df) + 1) # 原有输出逻辑保留 print(df) df.to_json('Json file')
效果验证
如果出现2名选手总分相同、初始排名为3、4的情况,两人的Ranking字段都会统一显示为3-4,如果同分人数为3人,排名会自动显示为3-5,适配任意人数的同分场景。
内容的提问来源于stack exchange,提问作者dude mcree
相关产品推荐
相关产品推荐

