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

如何在Polars中对学生考试成绩进行等分组并标记等级?

学生成绩分等级处理(Polars 0.17.9)

现有学生考试成绩数据,需完成以下操作:

  • 按成绩降序排序
  • 将学生总人数分成10个等分组(每组人数尽量均等,人数不足时自动调整分组大小)
  • 根据成绩所在组别标记对应等级:1组→A+,2组→A,3组→A-,4组→B+,5组→B,6组→B-,7组→C+,8组→C,9组→C-,10组→D

处理代码

import polars as pl

data = {'test': [77, 36, 55, 0, 100, 32, 66, 72, 42, 1, 33, 100, 55, 69, 87, 45, 45, 66, 37, 89, 32, 38, 78, 85, 23, 43, 10, 14, 55, 32, 27, 88, 90]}
df = pl.DataFrame(data)

# 组号与等级映射关系
grade_mapping = {
    1: 'A+',
    2: 'A',
    3: 'A-',
    4: 'B+',
    5: 'B',
    6: 'B-',
    7: 'C+',
    8: 'C',
    9: 'C-',
    10: 'D'
}

# 核心处理流程
result_df = (
    df
    .sort('test', descending=True)
    .with_row_index(name='row_idx')
    .with_columns(pl.col('row_idx').ntile(10).alias('group_num'))
    .with_columns(pl.col('group_num').map_dict(grade_mapping).alias('grade'))
    .drop('row_idx')
)

print(result_df)

关键步骤说明

  • 排序:sort('test', descending=True) 确保高分成绩进入靠前的组别,符合等级划分逻辑
  • 分组:ntile(10) 自动将数据分成10个等分组,针对33名学生的情况,前3组各4人,后7组各3人,满足“每组人数向上取整”的均等要求
  • 等级映射:map_dict 直接将组号转换为对应的等级标记,逻辑清晰高效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 16:42:49