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

如何合并两个pandas DataFrame并计算非公共关联列的差值

最简实现方案(推荐)

利用Pandas索引自动对齐的特性,仅需一行核心代码即可完成需求,天然遵循inner join逻辑,自动匹配两边都存在的关联键行,无需手动处理列匹配:

import pandas as pd

df1 = pd.DataFrame(data = {'A':[0,1,2],'B':[3,4,5],'C':[8,1,2],'D':[7,1,2],'E':[6,3,4]})
df2 = pd.DataFrame(data = {'A':[0,1,2],'B':[3,4,5],'C':[1,2,3],'D':[5,4,3],'E':[6,4,5]})

shared_cols = ['A', 'B']
# 核心逻辑:设置关联列为索引后做减法,自动按索引对齐(等效inner join),再恢复为普通列
df3 = df1.set_index(shared_cols).sub(df2.set_index(shared_cols)).reset_index()

输出结果完全符合预期:

A  B  C  D  E
0  0  3  7  2  0
1  1  4 -1 -3 -1
2  2  5 -1 -1 -1

显式merge实现方案(适合需要自定义merge规则场景)

如果需要显式控制merge逻辑,可采用如下写法,逻辑更透明,健壮性更强:

shared_cols = ['A', 'B']
# 过滤出需要计算差值的列
diff_cols = [col for col in df1.columns if col not in shared_cols]

# 显式执行inner merge确保行对齐
merged_df = df1.merge(df2, on=shared_cols, how='inner', suffixes=('_df1', '_df2'))

# 批量计算差值
for col in diff_cols:
    merged_df[col] = merged_df[f'{col}_df1'] - merged_df[f'{col}_df2']

# 提取最终结果列
df3 = merged_df[shared_cols + diff_cols]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 17:45:03