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

如何高效动态生成Pandas DataFrame合并后的列差异字段

实现方案

核心逻辑是提前对字段分类,后续新增同类型字段仅需更新字段列表即可,无需修改计算逻辑。

完整实现代码

import pandas as pd 
pd.set_option('display.max_columns', None)

# 构造测试数据
df1 = { 'Name':['George','Andrea','micheal','Ann',
            'maggie','Ravi','Xien','Jalpa'],
   'region':['a','a','a','a','b','b','b','b'],
    'score1':[63,42,55,70,38,77,86,99],
    'score2':[45,74,44,89,69,49,72,98]}
df2 = { 'Name':['George','Andrea','micheal', 'Matt',
            'maggie','Ravi','Xien','Jalpa'],
   'region':['a','b','a','a','a','b','b','a'],
    'score1':[62,47,55,74,32,77,86,77],
    'score2':[45,78,44,89,66,49,72,73]}
df1 = pd.DataFrame(df1)
df2 = pd.DataFrame(df2)

# ---------- 核心配置区:后续新增字段仅需调整此处即可 ----------
# 表关联主键
join_key = 'Name'
# 方案1:手动维护两类字段列表(适配命名无统一规则的场景)
# score_cols = ['score1', 'score2'] # 所有需要计算差值的得分列
# category_cols = ['region'] # 所有需要校验一致性的分类列

# 方案2:自动识别字段(无需手动维护,适配字段频繁新增场景,根据自己的命名规则调整判断条件即可)
score_cols = [col for col in df1.columns if col.startswith('score')]
category_cols = [col for col in df1.columns if col != join_key and col not in score_cols]
# -----------------------------------------------------------

# 合并两个表
df_all = pd.merge(df1, df2, how='outer', indicator=True, on=join_key, suffixes=('_df1','_df2'))
df_final = df_all.copy()

# 批量生成得分列差值字段
for col in score_cols:
    df_final[f"{col}_diff"] = df_final[f"{col}_df1"] - df_final[f"{col}_df2"]

# 批量生成分列一致性校验字段
for col in category_cols:
    # 可选:适配单边存在的行的校验逻辑,默认空值和任意值比较都为False
    # 例如需要两边都为空也判定为一致,可改为:df_final[f"{col}_diff"] = df_final[f"{col}_df1"].fillna('') == df_final[f"{col}_df2"].fillna('')
    df_final[f"{col}_diff"] = df_final[f"{col}_df1"] == df_final[f"{col}_df2"]

方案说明

  • 两种字段配置方式可按需选择:如果字段命名规则统一,优先使用自动识别方案,后续新增同规则字段完全无需修改代码;如果字段命名无固定规则,手动维护两个列表即可,仅需新增列名不用写计算逻辑
  • 外连接产生的单边存在数据,默认计算差值为NaN,一致性校验结果为False,可根据业务需求自行调整空值处理逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 22:54:07