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

如何在Pandas中为每个数值列生成rank?能否通过循环列实现?

Pandas实现按列计算分数排名(遍历列方式)

示例数据

首先定义示例DataFrame:

import pandas as pd

df = pd.DataFrame([['Jim', 93, 87, 66], 
                   ['Bob', 88, 90, 65],
                   ['Joe', 72, 100, 70]],
                   columns=['Name', 'Score1', 'Score2', 'Score3'])

原始数据输出:

Name  Score1  Score2  Score3
Jim       93      87      66
Bob       88      90      65
Joe       72     100      70

需求说明

需要生成新表,展示每列分数的排名(分数越高排名越靠前),期望输出:

Name  Score1  Score2  Score3
Jim        1       3       2
Bob        2       2       3
Joe        3       1       1

遍历列的实现方法

完全可以通过遍历每一列的方式实现,具体步骤如下:

  1. 复制原始DataFrame的Name列作为结果表的基础
  2. 遍历所有分数列(排除Name列),对每一列计算排名
  3. 将计算得到的排名替换结果表中对应的列

代码实现:

# 复制Name列到结果表
rank_df = df[['Name']].copy()

# 遍历所有分数列
for col in df.columns[1:]:
    # 使用rank方法,ascending=False设置分数越高排名越前,method='min'保证相同分数取最小排名
    rank_df[col] = df[col].rank(ascending=False, method='min').astype(int)

print(rank_df)

运行后即可得到期望的排名结果。

更高效的向量化实现(推荐)

如果你的DataFrame包含大量列和行,向量化操作比遍历更高效,无需循环直接对所有分数列批量计算排名:

# 对除Name外的列批量计算排名
rank_df = df.copy()
rank_df[df.columns[1:]] = df[df.columns[1:]].rank(ascending=False, method='min').astype(int)

print(rank_df)

这种方法代码更简洁,性能也更优,适合处理大规模数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 04:35:21