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

如何用Pandas/Python将分组学生排名转为单行逗号分隔格式

高效实现班级学生排名转单行格式

核心思路

用Pandas的分组排名+透视组合操作,全程依赖矢量化方法替代逐行循环,彻底解决大数据量下的性能问题。

步骤与代码示例

1. 构造模拟数据(匹配你的场景)

import pandas as pd
import numpy as np

# 生成3个微积分班级、每班10名学生的成绩数据
np.random.seed(42)
df = pd.DataFrame({
    '班级': np.repeat(['微积分1班', '微积分2班', '微积分3班'], 10),
    '学生ID': [f'S{i:03d}' for i in range(1, 31)],
    '考试成绩': np.random.randint(60, 100, 30)
})

2. 计算班级内学生排名

按班级分组后,对成绩做降序排名(高分排第1),method='first'用于处理同分场景,保证每个学生获得唯一排名:

# 新增排名列并转为整数类型
df['排名'] = df.groupby('班级')['考试成绩'].rank(ascending=False, method='first').astype(int)

3. 转换为单行格式

用pivot将排名转为列,每个班级对应一行,同时优化列名可读性:

# 透视转换为单行结构
result = df.pivot(index='班级', columns='排名', values='学生ID')
# 重命名列(如"第1名""第2名")
result.columns = [f'第{rank}名' for rank in result.columns]
# 可选:将班级从索引转为普通列
result = result.reset_index()

灵活调整说明

  • 若需要低分优先排名,将rank方法的ascending参数设为True即可。
  • 若同分学生需共享排名,可把method改为min(取最小排名)或max(取最大排名)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 11:45:26