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这类无关值),按优先级判定最终成绩:- 只要存在
PASS,直接判定为PASS - 若同时包含
MOD1和MOD2,判定为PASS - 仅包含
MOD1时,判定为MOD1 - 仅包含
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
相关产品推荐
相关产品推荐

