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
相关产品推荐
相关产品推荐

