Pandas如何将多个DataFrame的列求和结果汇总为单个DataFrame
Pandas多DataFrame指定列求和结果汇总方案
核心逻辑:循环处理时不要直接输出单表计算结果,先将每个对象的列求和结果存入列表,最终一次性转换为结构化DataFrame,支持追加来源标识(如DataFrame编号、Excel文件名)方便溯源。
基础示例修改
针对给出的两个测试DataFrame场景,修改后可直接输出汇总表:
import pandas as pd # 测试数据构造 df1 = pd.DataFrame() df1["Col1"] = [0,2,4,6,2] df1["Col2"] = [5,1,3,4,0] df1["Col3"] = [8,0,5,1,7] df1["Col4"] = [1,4,6,0,8] df2 = pd.DataFrame() df2["Col1"] = [8,2,4,6,2,3,5] df2["Col2"] = [3,7,3,4,0,6,8] df2["Col3"] = [5,0,5,1,7,9,1] df2["Col4"] = [0,4,6,0,8,6,0] dataframes = [df1, df2] sum_result_list = [] for df_id, df in enumerate(dataframes, start=1): # 计算指定列的和,同时记录来源表标识 single_sum = df.iloc[:, 1:3].sum(axis=0) single_sum["source"] = f"df{df_id}" sum_result_list.append(single_sum) # 拼接为最终汇总表 summary_df = pd.DataFrame(sum_result_list).set_index("source").reset_index() print(summary_df)
运行后输出结果:
source Col2 Col3 0 df1 13 21 1 df2 31 28
批量读取Excel场景实现
适配批量处理路径下所有xlsx文件的业务逻辑,代码如下(提前确认iloc的列索引范围符合业务要求,索引从0开始计数,切片为左闭右开规则):
import pandas as pd import glob import os # 替换为你的Excel文件存放路径 file_path = "your/excel/folder/path" xlsx_files = glob.glob(os.path.join(file_path, "*.xlsx")) sum_result_list = [] for file in xlsx_files: df = pd.read_excel(file) file_name = os.path.basename(file) # 计算指定列范围的和,追加文件名标识 single_sum = df.iloc[:, 13:28].sum(axis=0) single_sum["file_name"] = file_name sum_result_list.append(single_sum) # 生成汇总表 excel_summary = pd.DataFrame(sum_result_list).set_index("file_name").reset_index() # 可直接导出汇总结果到本地 excel_summary.to_excel("列求和汇总结果.xlsx", index=False)
补充说明
- 若不同文件/表的指定列名存在差异,pandas会自动按列名对齐,缺失列会自动填充空值
- 若不需要来源标识,直接将每次计算得到的Series存入列表,最终调用
pd.DataFrame(sum_result_list)即可得到纯数值汇总表 - 上述代码中用
os.path.basename(file)取文件名,可兼容Windows、Mac、Linux全系统的路径规则,不需要手动区分路径分隔符
内容的提问来源于stack exchange,提问作者Serdia
相关产品推荐
相关产品推荐

