如何实现按学生最高成绩排序后再对每个学生的课程按成绩排序
实现方法
方法1:Excel操作
步骤如下:
- 新增2个辅助列:
- 学生10分数量:公式为
=COUNTIFS(A:A,A2,B:B,10),下拉填充所有行,统计每个学生拿到10分的课程总数 - 学生次高成绩:公式为
=MAXIFS(B:B,A:A,A2,B:B,"<10"),下拉填充所有行,统计每个学生除10分外的最高成绩,无符合值时返回0
- 学生10分数量:公式为
- 选中整个数据区域,自定义排序:
- 第一优先级:学生10分数量,数值降序
- 第二优先级:学生次高成绩,数值降序
- 第三优先级:学生姓名字典序升序(避免前两个优先级相同时乱序)
- 第四优先级:Grade,数值降序
- 排序完成后删除辅助列即可得到目标结果。
方法2:Python pandas 代码实现
import pandas as pd # 构造原始数据 data = { "Student": ["JOHN", "JOHN", "ANNA", "ANNA", "JACOB", "GEORGE", "GEORGE", "GEORGE"], "Grade": [10,7,10,10,10,6,10,9], "Course": ["Algebra", "Computer science", "Algebra", "Data structures", "Data structures", "Computer science", "Algebra", "Data structures"] } df = pd.DataFrame(data) # 计算学生排序权重 df['count_10'] = df.groupby('Student')['Grade'].transform(lambda x: (x==10).sum()) df['second_max'] = df.groupby('Student')['Grade'].transform(lambda x: x[x<10].max() if len(x[x<10])>0 else 0) # 执行排序 df_sorted = df.sort_values(by=['count_10', 'second_max', 'Student', 'Grade'], ascending=[False, False, True, False]) # 清理辅助列输出结果 df_result = df_sorted.drop(columns=['count_10', 'second_max']).reset_index(drop=True) print(df_result)
运行代码即可输出完全符合要求的排序结果。
内容的提问来源于stack exchange,提问作者Babis.amas
相关产品推荐
相关产品推荐

