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

Excel Group IF语句应用:按规则合并学生成绩分组数据需求

学生成绩合并处理方案

原始数据

STUDENT SCORE
1   PASS
1   MOD1
1   MOD2
2   MOD1
3   MOD2
3   MOD2
3   MOD1
3   ER
4   MOD2
4   ER

目标合并结果

STUDENT SCORE
1   PASS
2   MOD1
3   PASS
4   MOD2

处理规则(中文翻译)

  • 针对每位学生的所有有效成绩(忽略ER这类无关值),按优先级判定最终成绩:
    1. 只要存在PASS,直接判定为PASS
    2. 若同时包含MOD1和MOD2,判定为PASS
    3. 仅包含MOD1时,判定为MOD1
    4. 仅包含MOD2时,判定为MOD2

实现代码(Python)

纯字典实现(无需第三方库)

# 模拟原始数据输入
raw_data = """STUDENT SCORE
1   PASS
1   MOD1
1   MOD2
2   MOD1
3   MOD2
3   MOD2
3   MOD1
3   ER
4   MOD2
4   ER"""

# 拆分数据并跳过表头
lines = raw_data.strip().split('\n')[1:]

# 存储每个学生的有效成绩集合
student_scores = {}
for line in lines:
    student_id, score = line.strip().split()
    student_id = int(student_id)
    # 过滤无关成绩
    if score in ['PASS', 'MOD1', 'MOD2']:
        student_scores.setdefault(student_id, set()).add(score)

# 按规则生成最终结果
result = [['STUDENT', 'SCORE']]
for student in sorted(student_scores.keys()):
    scores = student_scores[student]
    if 'PASS' in scores:
        final_score = 'PASS'
    elif 'MOD1' in scores and 'MOD2' in scores:
        final_score = 'PASS'
    elif 'MOD1' in scores:
        final_score = 'MOD1'
    elif 'MOD2' in scores:
        final_score = 'MOD2'
    else:
        final_score = 'UNKNOWN'
    result.append([str(student), final_score])

# 输出结果
for row in result:
    print(f"{row[0]}   {row[1]}")

Pandas实现(适合大数据量场景)

import pandas as pd

# 读取原始数据
raw_data = """STUDENT SCORE
1   PASS
1   MOD1
1   MOD2
2   MOD1
3   MOD2
3   MOD2
3   MOD1
3   ER
4   MOD2
4   ER"""

df = pd.read_csv(pd.compat.StringIO(raw_data), sep='\s+')

# 过滤无关成绩并按学生分组
grouped = df[df['SCORE'].isin(['PASS', 'MOD1', 'MOD2'])].groupby('STUDENT')['SCORE'].apply(set)

# 定义成绩判定函数
def get_final_score(scores):
    if 'PASS' in scores:
        return 'PASS'
    elif {'MOD1', 'MOD2'}.issubset(scores):
        return 'PASS'
    elif 'MOD1' in scores:
        return 'MOD1'
    elif 'MOD2' in scores:
        return 'MOD2'
    return 'UNKNOWN'

# 生成最终结果并输出
final_df = grouped.apply(get_final_score).reset_index(name='SCORE')
print(final_df.to_string(index=False))

运行上述任意代码,均可得到目标合并结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 22:46:13