如何在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
相关产品推荐
相关产品推荐

