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

如何通过列表批量累加多个Pandas DataFrame的对应值?

批量累加多个DataFrame的高效实现方案

你可以用和批量merge类似的思路来实现多个DataFrame的数值累加,这里提供两种实用的方法,都能替代你原来的逐个add操作,而且可以轻松扩展到3个以上的DataFrame:

方法1:用functools.reduce实现(和批量merge逻辑对齐)

和你用reduce处理merge的思路完全一致,我们只需要把合并操作换成DataFrame的add方法,同时通过fill_value=0来处理缺失的行(避免缺失值变成NaN):

步骤1:统一处理索引(更高效)

先给所有DataFrame设置共同的索引列,避免重复操作:

import pandas as pd
from functools import reduce

# 假设已经读取好data0、data1、data2
data_list = [df.set_index(['player_id', 'player_name']) for df in [data0, data1, data2]]

步骤2:用reduce批量累加

# 用reduce逐个累加所有DataFrame
final_data = reduce(lambda left, right: left.add(right, fill_value=0), data_list)

# 恢复索引并转换为整数类型(和你的需求对齐)
final_data = final_data.astype(int).reset_index()

如果你不想提前统一设置索引,也可以把索引操作放到reduce的lambda函数里(效率稍低,但代码更紧凑):

data_list = [data0, data1, data2]
final_data = reduce(
    lambda left, right: left.set_index(['player_id', 'player_name'])
                           .add(right.set_index(['player_id', 'player_name']), fill_value=0)
                           .reset_index(),
    data_list
).astype(int)

方法2:用concat + groupby求和(更直观)

另一种更易读的方法是先把所有DataFrame纵向拼接,再按分组键求和,逻辑更清晰:

import pandas as pd

data_list = [data0, data1, data2]

# 拼接所有DataFrame
combined_df = pd.concat(data_list)

# 按player_id和player_name分组,对数值列求和
final_data = combined_df.groupby(['player_id', 'player_name']).sum().astype(int).reset_index()

结果验证

两种方法都会生成你期望的final_data,比如:

  • S. Smith的ab列会是0+1+1=2,run列是0+4+9=13,hit列是0+6+2=8
  • J.J. Hardy的hit列是0+10+5=15

完全匹配你给出的目标结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 03:57:24