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

如何在Pandas DataFrame中实现含并列标记的位次排名

实现带有并列标记的位次列

可以通过 Pandas 的rank()方法结合值计数来实现需求,具体步骤如下:

完整代码实现

import pandas as pd

names = ['a', 'b', 'c', 'd', 'e']
points = [10, 15, 15, 12, 20]

scores = pd.DataFrame({'name': names,
                       'points': points})

# 按points降序排序(保留完整流程)
scores = scores.sort_values(by='points', ascending=False)

# 计算每个分数对应的最低位次:相同分数取最小位次
scores['temp_rank'] = scores['points'].rank(ascending=False, method='min').astype(int)

# 统计每个分数的出现次数
score_freq = scores['points'].value_counts()

# 生成position列:并列分数添加'T'前缀,非并列保留位次数字
scores['position'] = scores.apply(
    lambda x: f"T{x['temp_rank']}" if score_freq[x['points']] > 1 else str(x['temp_rank']),
    axis=1
)

# 移除临时辅助列(可选)
scores = scores.drop('temp_rank', axis=1)

# 输出结果
print(scores)

关键逻辑说明

  1. 位次计算:使用rank(ascending=False, method='min')实现降序位次,相同分数会获得该分数对应的最小位次(比如示例中15分的两条数据位次都是2)。
  2. 并列判断:通过value_counts()统计每个分数的出现次数,次数大于1即为并列情况。
  3. 列值生成:用apply()逐行处理,对并列的位次添加'T'前缀,非并列直接保留位次数字。

运行代码后会得到期望输出:

name  points position
4    e      20        1
1    b      15       T2
2    c      15       T2
3    d      12        3
0    a      10        4

内容的提问来源于stack exchange,提问作者HJA24

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 06:10:29