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

Python中基于三列匹配条件实现DataFrame多列相减运算

Pandas 按前三列匹配后做表间数值差的实现方案

逐行遍历的for循环在处理大规模DataFrame时效率极低,且容易出现索引匹配错误,推荐用pandas内置的合并+向量化运算实现,代码简洁且性能优异,具体实现如下:

import pandas as pd

# 拆分匹配键列和待计算数值列
match_keys = dfA.columns[:3].tolist()
calc_cols = dfA.columns[3:].tolist()

# 内连接只保留前三列完全匹配的行,同名列加来源后缀区分
merged_df = pd.merge(
    dfA,
    dfB,
    on=match_keys,
    how="inner",
    suffixes=("_a", "_b")
)

# 生成结果表
NewDF = merged_df[match_keys].copy()
# 逐列做向量化减法,比逐行循环快百倍以上
for col in calc_cols:
    NewDF[col] = merged_df[f"{col}_b"] - merged_df[f"{col}_a"]

补充说明

  • 若需要保留两个表中未匹配成功的行,将pd.merge的how参数修改为"outer"即可,无匹配行的数值位置会自动填充为空值NaN
  • 若需要固定结果的列顺序和原表完全一致,可以在生成NewDF后加一行代码:NewDF = NewDF[dfA.columns.tolist()]
  • 该实现基于pandas向量化运算,对百万行级别的数据也能在数秒内完成计算,完全适配大规模数据场景,性能远高于逐行for循环实现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 23:30:52