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

如何实现按学生最高成绩排序后再对每个学生的课程按成绩排序

实现方法

方法1:Excel操作

步骤如下:

  • 新增2个辅助列:
    1. 学生10分数量:公式为=COUNTIFS(A:A,A2,B:B,10),下拉填充所有行,统计每个学生拿到10分的课程总数
    2. 学生次高成绩:公式为=MAXIFS(B:B,A:A,A2,B:B,"<10"),下拉填充所有行,统计每个学生除10分外的最高成绩,无符合值时返回0
  • 选中整个数据区域,自定义排序:
    1. 第一优先级:学生10分数量,数值降序
    2. 第二优先级:学生次高成绩,数值降序
    3. 第三优先级:学生姓名字典序升序(避免前两个优先级相同时乱序)
    4. 第四优先级: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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 19:00:05