You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 06:48:00