如何将多个Pandas DataFrame的求和结果分别追加到目标df_sum?
实现DataFrame求和结果批量追加的方案
核心逻辑
针对每个源DataFrame计算指定列的总和,将数据源名称与求和结果组成新行,统一追加到目标DataFramedf_sum中。
方法1:逐个处理(直观易懂)
适合数据源数量较少的场景,直接对每个DataFrame单独计算并追加:
# 处理df_A sum_a = df_A[["Column2", "Column3"]].sum() df_sum = df_sum.append( {"Source": "df_A", "Column2_SUM": sum_a["Column2"], "Column3_SUM": sum_a["Column3"]}, ignore_index=True ) # 处理df_B sum_b = df_B[["Column2", "Column3"]].sum() df_sum = df_sum.append( {"Source": "df_B", "Column2_SUM": sum_b["Column2"], "Column3_SUM": sum_b["Column3"]}, ignore_index=True ) # 处理df_C sum_c = df_C[["Column2", "Column3"]].sum() df_sum = df_sum.append( {"Source": "df_C", "Column2_SUM": sum_c["Column2"], "Column3_SUM": sum_c["Column3"]}, ignore_index=True ) # 处理df_D sum_d = df_D[["Column2", "Column3"]].sum() df_sum = df_sum.append( {"Source": "df_D", "Column2_SUM": sum_d["Column2"], "Column3_SUM": sum_d["Column3"]}, ignore_index=True )
方法2:批量循环处理(高效简洁)
如果后续可能新增数据源,用字典存储所有源DataFrame,通过循环批量处理更易维护:
# 将所有源DataFrame存入字典,键为数据源标识,值为对应DataFrame source_dfs = {"df_A": df_A, "df_B": df_B, "df_C": df_C, "df_D": df_D} # 遍历字典完成计算与追加 for source_name, df in source_dfs.items(): col_sums = df[["Column2", "Column3"]].sum() df_sum = df_sum.append( { "Source": source_name, "Column2_SUM": col_sums["Column2"], "Column3_SUM": col_sums["Column3"] }, ignore_index=True )
兼容pandas 2.0+的替代方案
由于pandas 2.0及以上版本已弃用append()方法,可改用pd.concat()实现:
source_dfs = {"df_A": df_A, "df_B": df_B, "df_C": df_C, "df_D": df_D} new_rows = [] for source_name, df in source_dfs.items(): col_sums = df[["Column2", "Column3"]].sum() # 生成单个结果行的DataFrame row_df = pd.DataFrame({ "Source": [source_name], "Column2_SUM": [col_sums["Column2"]], "Column3_SUM": [col_sums["Column3"]] }) new_rows.append(row_df) # 合并原df_sum与所有新行 df_sum = pd.concat([df_sum] + new_rows, ignore_index=True)
关键注意点
- 确保所有源DataFrame都包含
Column2和Column3列,否则会触发KeyError - 使用
ignore_index=True可以避免追加后出现重复索引的问题
内容的提问来源于stack exchange,提问作者Behseini
相关产品推荐
相关产品推荐

