如何拆分数据集Subject Error字段分号以统计各科目不及格次数?
拆分多科目统计并重新累加计数的实现方法
实现逻辑
先把每一行的计数和对应科目列表拆分开,再将每个科目单独提取出来,把对应计数累加到该科目的总计数里,最后按计数从高到低输出结果。
Python 代码实现
# 原始统计数据 raw_lines = [ "Count of 23: English", "Count of 10: Math; Science ", "Count of 2: English; Math; Social Studies " ] # 用字典存储每个科目的总计数 subject_total = {} for line in raw_lines: # 拆分计数部分和科目部分 count_text, subjects_str = line.split(": ") # 提取数字计数 current_count = int(count_text.replace("Count of ", "")) # 拆分科目,清理空格和空项 subjects = [s.strip() for s in subjects_str.split(";") if s.strip()] # 给每个科目累加计数 for sub in subjects: if sub in subject_total: subject_total[sub] += current_count else: subject_total[sub] = current_count # 按计数从高到低排序输出 for sub, cnt in sorted(subject_total.items(), key=lambda x: -x[1]): print(f"Count of {cnt}: {sub}")
代码说明
- 拆分每行数据:通过
:分割出计数文本和科目字符串,再从计数文本里提取出数字值。 - 处理多科目:用
;拆分多个科目,同时清理科目名称前后的空格,避免出现空字符串。 - 累加计数:遍历每个科目,在字典里更新该科目的总计数,不存在的科目就初始化为当前计数。
- 排序输出:按总计数降序排列后,格式化输出最终结果。
运行代码后得到的结果:
Count of 24: English Count of 11: Math Count of 10: Science Count of 2: Social Studies
(注:你提供的目标结果中Social Studies计数为1,按原始数据计算实际应为2,这里是符合原始数据逻辑的正确结果)
内容的提问来源于stack exchange,提问作者user12282981
相关产品推荐
相关产品推荐

