如何在循环中对多个Pandas DataFrame进行数值求和?
针对多DataFrame数值列求和的解决方案
要实现只对数值列求和、保留文本标签列的需求,可通过以下几种实用方式处理:
方法一:列表收集+逐列求和(适配循环场景)
先在循环中将生成的所有DataFrame存入列表,再对数值列累加,最后保留标签列:
import pandas as pd # 生成示例数据(循环中替换为动态生成逻辑即可) data1 = {'Header':['L1','L2','L3'], 'Val1':[float(100),float(200),float(300)], 'Val2':[float(400),float(500),float(600)], 'Val3': [float(700),float(800),float(900)]} data1_summary = pd.DataFrame(data=data1) data2 = {'Header':['L1','L2','L3'], 'Val1':[float(1000),float(1100),float(1200)], 'Val2':[float(1300),float(1400),float(1500)], 'Val3': [float(1600),float(1700),float(1800)]} data2_summary = pd.DataFrame(data=data2) data3 = {'Header':['L1','L2','L3'], 'Val1':[float(1900),float(2000),float(2100)], 'Val2':[float(2200),float(2300),float(2400)], 'Val3': [float(2500),float(2600),float(2700)]} data3_summary = pd.DataFrame(data=data3) # 1. 将所有DataFrame存入列表(循环中直接append新生成的df即可) dfs = [data1_summary, data2_summary, data3_summary] # 2. 复制第一个DataFrame的结构,仅更新数值列总和 sum_df = dfs[0].copy() # 对指定数值列进行累加 sum_df[['Val1', 'Val2', 'Val3']] = sum(df[['Val1', 'Val2', 'Val3']] for df in dfs) print(sum_df)
输出结果:
Header Val1 Val2 Val3 0 L1 3000.0 3900.0 4800.0 1 L2 3300.0 4200.0 5100.0 2 L3 3600.0 4500.0 5400.0
方法二:合并后分组求和(适配标签顺序不一致场景)
如果不同DataFrame的标签行顺序可能不同,可先合并所有DataFrame,再按Header分组求和:
# 合并所有DataFrame combined_df = pd.concat(dfs) # 按Header分组,对数值列求和并重置索引 sum_df = combined_df.groupby('Header').sum().reset_index() print(sum_df)
该方法会自动对齐相同标签的行,即使不同DataFrame的行顺序不同也能正确计算总和。
方法三:循环调用add方法累加
初始化一个空的数值列结构,循环调用add方法逐步累加:
# 初始化总和DataFrame,复制第一个df的Header和数值列结构 sum_df = dfs[0].copy() sum_df[['Val1', 'Val2', 'Val3']] = 0 # 循环累加每个df的数值列 for df in dfs: sum_df[['Val1', 'Val2', 'Val3']] = sum_df[['Val1', 'Val2', 'Val3']].add(df[['Val1', 'Val2', 'Val3']]) print(sum_df)
这种方式逻辑直观,适合需要跟踪逐步累加过程的场景。
内容的提问来源于stack exchange,提问作者Add
相关产品推荐
相关产品推荐

