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

Pandas合并DataFrame并保留单列:索引不一致时的值相加问题

解决两个DataFrame按索引合并并对应值相加的问题

嘿,我来帮你搞定这个问题!首先咱们先把需求拆解清楚:你需要把两个DataFrame按索引对齐,共同索引的行对应值相加;df2里存在但df1没有的行要添加到结果中;df1独有的行则保持原有数值不变。下面我用具体的示例代码和两种常用方案来解决这个问题。

第一步:构造示例数据

先创建符合你描述的两个DataFrame,方便后续演示:

import pandas as pd

# df1:包含共同索引12345/MX,独有索引12345/US
df1 = pd.DataFrame(
    {'count': [15, 25]},
    index=['12345/MX', '12345/US']
)

# df2:包含共同索引12345/MX,独有索引54321/US
df2 = pd.DataFrame(
    {'count': [30, 40]},
    index=['12345/MX', '54321/US']
)

方案一:使用add()方法(简洁高效)

pandas的add()方法支持按索引对齐相加,通过设置fill_value=0可以自动处理缺失索引的情况:

# 执行相加操作
result = df1.add(df2, fill_value=0)

print(result)

输出结果:

count
12345/MX    45.0
12345/US    25.0
54321/US    40.0

原理说明:

  • 共同索引12345/MX:15 + 30 = 45,符合相加规则
  • df1独有索引12345/US:25 + 0(df2中无此索引,用0填充)= 25,保持原值
  • df2独有索引54321/US:0(df1中无此索引,用0填充)+ 40 = 40,成功添加该行

方案二:使用concat() + groupby()(灵活通用)

如果你的DataFrame有多个列需要处理,或者需要更灵活的分组逻辑,这种方法更适用:

# 合并两个DataFrame
combined = pd.concat([df1, df2])
# 按索引分组并求和
result = combined.groupby(combined.index).sum()

print(result)

输出结果和方案一完全一致:

count
12345/MX      45
12345/US      25
54321/US      40

原理说明:

  • concat()会把两个DataFrame的所有行合并到一起,包括各自的独有索引
  • groupby(index).sum()会将相同索引的行值求和,独有的索引自然保留自身的数值

这两种方案都能完美满足你的需求,你可以根据自己的场景选择更合适的一种。如果是单列表格,方案一更简洁;多列或复杂场景下,方案二更灵活。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:39:45