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

如何对比两个DataFrame并并排展示差异?添加后缀后去重失效问题

DataFrame差异对比并排展示解决方案

核心思路

先按主键合并两个DataFrame,给来源不同的列加上区分后缀,再筛选出存在差异的行,最后调整格式匹配需求。

分步实现代码

  1. 合并并标记来源列
    以A列为匹配键,合并两个DataFrame,用suffixes参数给列名加上_df1和_df2后缀,明确区分数据来源:

    merged_df = pd.merge(df1, df2, on='A', suffixes=('_df1', '_df2'))
    

    合并后得到的结果列结构为 A, B_df1, B_df2,所有对应行的内容会被放在同一行中。

  2. 筛选差异行
    直接对比对应列的数值,筛选出B_df1和B_df2不相等的行:

    diff_rows = merged_df[merged_df['B_df1'] != merged_df['B_df2']]
    
  3. 调整输出格式(匹配期望样式)
    复制A列并重命名,调整列顺序以完全匹配你要的输出结构:

    diff_rows['A_df2'] = diff_rows['A']
    diff_rows = diff_rows.rename(columns={'A': 'A_df1'})
    diff_rows = diff_rows[['A_df1', 'B_df1', 'A_df2', 'B_df2']]
    

完整可运行代码

import pandas as pd

# 构造示例数据
df1 = pd.DataFrame({'A': [1,2,3], 'B': [4,5,6]})
df2 = pd.DataFrame({'A': [1,2,3], 'B': [4,7,6]})

# 合并并标记来源
merged_df = pd.merge(df1, df2, on='A', suffixes=('_df1', '_df2'))
# 筛选差异行
diff_rows = merged_df[merged_df['B_df1'] != merged_df['B_df2']]
# 调整输出格式
diff_rows['A_df2'] = diff_rows['A']
diff_rows = diff_rows.rename(columns={'A': 'A_df1'})
diff_rows = diff_rows[['A_df1', 'B_df1', 'A_df2', 'B_df2']]

print(diff_rows)

运行后输出:

A_df1  B_df1  A_df2  B_df2
1      2      5      2      7

为什么之前的concat方法失效?

用concat+add_suffix后,两个DataFrame的列名完全不同(比如A_df1和A_df2),即使整行数值重复,也会被判定为不同行,因此drop_duplicates无法识别并去除重复项。而merge的方式是把同主键的行合并到同一行,能直接对比对应列的差异,更贴合你的溯源需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 09:35:19