禁止使用Pandas扩展:基础Python按用户名汇总CSV分数方法
解决按Username分组汇总分数的问题
嘿,我来帮你搞定这个按用户名汇总分数的需求!你原来的代码只是把所有行的分数加起来得到了一个全局总和,没有按用户分组统计,我们只需要用一个字典来跟踪每个用户的累计总分就能完美解决啦。
核心思路
- 用字典
user_totals来存储每个用户名对应的累计总分,键是用户名,值是该用户的总分,这样能方便地按用户分组累加。 - 遍历每一行时,先计算当前行的
Auto Score与Manual Score之和,再把这个值加到对应用户名的累计总分里。 - 最后把字典中的结果写入新CSV文件,就能得到你想要的按用户汇总的输出。
完整代码实现
import csv # 初始化字典,用于存储每个用户的累计总分 user_totals = {} # 读取原始CSV文件 with open("exam_for_2019.csv") as csvfile: reader = csv.DictReader(csvfile) for row in reader: # 处理空分数的情况:空值转为0.0,避免报错 auto_score = float(row['Auto Score'].strip()) if row['Auto Score'].strip() else 0.0 manual_score = float(row['Manual Score'].strip()) if row['Manual Score'].strip() else 0.0 # 计算当前行的分数总和 row_sum = auto_score + manual_score # 更新对应用户的累计总分 username = row['Username'] if username in user_totals: user_totals[username] += row_sum else: user_totals[username] = row_sum # 将汇总结果写入新的CSV文件 with open("total_scores.csv", "w", newline='') as outfile: writer = csv.writer(outfile) # 写入表头 writer.writerow(['Username', 'Total Score']) # 遍历字典,写入每个用户的总分 for username, total in user_totals.items(): writer.writerow([username, total]) # 可选:打印结果验证 for username, total in user_totals.items(): print(f"{username} {total}")
关键细节说明
- 字典分组逻辑:
user_totals是实现分组的核心,它能自动帮我们区分不同用户的分数,避免混淆。 - 空值处理:保留了你原来的逻辑,把空的分数字段转为0.0,确保不会因为空值引发类型转换错误。
- 输出CSV:生成的
total_scores.csv完全符合你期望的格式,表头和每行的用户名、总分一一对应。
内容的提问来源于stack exchange,提问作者RickyPang
相关产品推荐
相关产品推荐

