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

如何用Pandas批量处理多份CSV文件并计算学生平均成绩

合并多个CSV文件并按学生ID计算平均成绩

我来帮你搞定这个需求!你需要将三个记录作业成绩的CSV文件合并,按Student id分组计算Mark的平均值,同时保留学生的其他附加字段。这里默认一个前提:每个学生的附加字段(extra fields)在所有文件里是一致的,这样我们可以安全地保留这些字段。

下面是比逐行遍历更高效简洁的实现步骤:

1. 批量读取并合并所有CSV文件

先把所有CSV文件的路径整理成列表,用pandas.concat()一次性合并成一个大的DataFrame,不用单独处理每个文件:

import pandas as pd

# 把你的三个CSV文件路径放到这里
csv_paths = ['first.csv', 'second.csv', 'third.csv']

# 批量读取并合并所有文件
combined_df = pd.concat([pd.read_csv(path) for path in csv_paths], ignore_index=True)

2. 按学生ID分组计算平均分并保留附加字段

接下来按Student id分组,对Mark列计算平均值,其他附加字段因为每个学生是唯一的,我们取每组里的第一个值(或者最后一个,结果都一样):

# 定义聚合规则:Mark取平均值,其他字段取第一个出现的值
agg_rules = {
    'Mark': 'mean',
}
# 自动把其他字段加入聚合规则,取第一个值
for col in combined_df.columns:
    if col not in ['Student id', 'Mark']:
        agg_rules[col] = 'first'

# 执行分组聚合
result_df = combined_df.groupby('Student id', as_index=False).agg(agg_rules)

# 把平均分的列名改成你要的`average`,并调整列顺序
result_df.rename(columns={'Mark': 'average'}, inplace=True)
# 确保Student id和average排在最前面
final_cols = ['Student id', 'average'] + [col for col in combined_df.columns if col not in ['Student id', 'Mark']]
result_df = result_df[final_cols]

3. 输出或保存结果

最后可以打印结果,或者保存成新的CSV文件:

# 打印结果
print(result_df)

# 保存到新的CSV文件(不保留索引)
result_df.to_csv('student_average_scores.csv', index=False)

为什么不推荐逐行遍历?

你之前用iterrows()的方法虽然能实现,但Pandas的矢量化操作(比如分组聚合)效率要高得多,尤其是数据量大的时候,而且代码更简洁易维护,后续如果要加更多CSV文件,只要在csv_paths里加路径就行,不用改其他代码。

如果你的附加字段在不同文件里有可能不一致,那可以提前处理冲突(比如标记差异、取众数等),不过从你的示例来看,应该每个学生的附加字段是固定的,上面的方法完全适用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 19:43:11