如何对比两个DataFrame并并排展示差异?添加后缀后去重失效问题
DataFrame差异对比并排展示解决方案
核心思路
先按主键合并两个DataFrame,给来源不同的列加上区分后缀,再筛选出存在差异的行,最后调整格式匹配需求。
分步实现代码
合并并标记来源列
以A列为匹配键,合并两个DataFrame,用suffixes参数给列名加上_df1和_df2后缀,明确区分数据来源:merged_df = pd.merge(df1, df2, on='A', suffixes=('_df1', '_df2'))合并后得到的结果列结构为
A, B_df1, B_df2,所有对应行的内容会被放在同一行中。筛选差异行
直接对比对应列的数值,筛选出B_df1和B_df2不相等的行:diff_rows = merged_df[merged_df['B_df1'] != merged_df['B_df2']]调整输出格式(匹配期望样式)
复制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
相关产品推荐
相关产品推荐

