Pandas 实现score ratio≤0.05时分配同组次优Percent学生
Pandas低得分占比学生的替换人选分配实现
已完成的前置操作
基于给定的示例学生成绩数据集,已通过分组聚合完成得分占比score ratio列的计算,对应实现逻辑如下:
- 初始化示例数据集
import pandas as pd df = pd.DataFrame({ 'Teacher': ['P','P','N','N','N','N','P','N','N','P','P','N'], 'Class': ['A','A','A','A','B','B','B','C','C','C','C','C'], 'Student': [1,2,3,4,1,2,3,1,2,3,4,5], 'Total Score': [75,10,10,5,75,20,5,60,20,10,6,4], 'Percent': [43,32,30,36,35,28,34,33,31,36,37,29] }) - 计算分组总得分并匹配到原表
# 按授课教师、班级分组计算每组总得分 df_2 = df.groupby(['Teacher','Class']).agg({'Total Score': 'sum'}).reset_index() # 合并分组总得分到原表 final_data = pd.merge(df, df_2, on=['Teacher','Class'], how='inner') # 计算单学生得分占组内总得分的比例 final_data['score ratio'] = final_data['Total Score_x'] / final_data['Total Score_y']
业务规则拆解
- 触发条件:当学生的
score ratio ≤ 0.05时,需要为其分配替换人选 - 筛选范围:替换人选必须和触发学生属于同一授课教师、同一班级的分组内
- 人选标准:取对应分组内Percent值次优的学生作为替换人选(例如教师N带的C班分组内,Percent值排序从高到低为33(学生1)、31(学生2)、29(学生5),次优值31对应的学生2即为规则要求的替换人选)
替换人选逻辑实现
- 遍历每个
Teacher + Class分组,提取组内按Percent从高到低排序的次优学生编号# 生成分组对应的次优学生映射表 group_second_best = ( final_data .groupby(['Teacher', 'Class']) .apply( lambda group: group.sort_values('Percent', ascending=False)['Student'].iloc[1] ) .reset_index(name='second_best_student') ) - 将次优学生映射合并回主表,按触发条件生成
new_assigned_student列final_data = final_data.merge(group_second_best, on=['Teacher', 'Class'], how='left') # 满足得分占比阈值条件时填充次优学生,不满足则留空 final_data['new_assigned_student'] = final_data.apply( lambda row: row['second_best_student'] if row['score ratio'] <= 0.05 else None, axis=1 )
结果校验
最终生成的new_assigned_student列会严格匹配规则:仅当学生得分占比低于等于0.05时,才会填充同组Percent次优的学生编号,其余场景不填充。
内容的提问来源于stack exchange,提问作者HKE
相关产品推荐
相关产品推荐

