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

如何用Pandas合并多个DataFrame并累加重复键对应的值?

Pandas合并重复键DataFrame并累加值的高效方法

当然有更简洁高效的Pandas方案!你已经用到了pd.concat(dfs)来合并多个DataFrame,其实在此基础上,直接用groupby配合聚合函数就能一步完成重复键的值累加,完全不用手动处理重复项或者逐行遍历——这也是Pandas处理这类场景的标准做法。

核心思路

  1. 合并所有DataFrame:先用pd.concat()把多个待合并的DataFrame拼接成一个大的DataFrame,这一步你已经尝试过了。
  2. 按键分组并累加:以你的重复键(比如ID)为分组依据,对需要累加的列使用sum()聚合函数,Pandas会自动将相同键的行合并,并把对应数值列的值累加起来。

示例代码

先创建几个测试用的DataFrame:

import pandas as pd

# 示例DataFrame
df1 = pd.DataFrame({'ID': [1, 2, 3], 'Score': [85, 90, 78]})
df2 = pd.DataFrame({'ID': [2, 3, 4], 'Score': [5, 12, 92]})
df3 = pd.DataFrame({'ID': [1, 4], 'Score': [10, 8]})

然后执行合并和累加操作:

# 合并所有DataFrame
combined_df = pd.concat([df1, df2, df3])

# 按ID分组,累加Score列,同时保留ID为列(as_index=False)
master_df = combined_df.groupby('ID', as_index=False).sum()

print(master_df)

输出结果:

ID  Score
0   1     95
1   2     95
2   3     90
3   4    100

处理混合类型列的情况

如果你的DataFrame里既有需要累加的数值列,又有需要保留特定值的非数值列(比如分类标签),可以用agg()函数自定义每列的处理逻辑:

# 带分类列的示例DataFrame
df1 = pd.DataFrame({'ID': [1, 2], 'Score': [85, 90], 'Class': '一班'})
df2 = pd.DataFrame({'ID': [2, 3], 'Score': [5, 12], 'Class': '二班'})

combined_df = pd.concat([df1, df2])
master_df = combined_df.groupby('ID', as_index=False).agg(
    Score=('Score', 'sum'),  # 累加分数
    Class=('Class', 'first')  # 保留第一个出现的班级
)

print(master_df)

输出结果:

ID  Score Class
0   1     85   一班
1   2     95   一班
2   3     12   二班

为什么这个方法更好?

相比你提到的手动处理重复项或者逐行遍历,groupby是Pandas底层优化过的操作,在数据量较大时性能优势非常明显,而且代码更简洁易读,逻辑也更清晰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 18:52:42