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

如何用Pandas对比不同大小的DataFrame并筛选差异数据

用Pandas对比不同规模DataFrame找差异行

问题场景

手里有两个本该完全一致但行数不一样的DataFrame,要找出里面的差异数据。试了df.eq()方法,输出的只是每个单元格的布尔值,达不到需要的带所有行和校验结果的格式。

测试代码

import pandas as pd

df = pd.DataFrame({'col1': [1, 2], 'col2': [3, 4]})
df2 = pd.DataFrame({'col1': [14, 22], 'col2': [32, 22]})
df.eq(df2)

当前输出

col1   col2
0  False  False
1  False   True

期望结果

col1  col2  Verify
1      3    False
2      4    False
14     32   False
22     22   True

解决办法

要拿到包含所有行和校验标记的结果,得先把两个表合并,再逐组校验对应行的所有列是否匹配:

代码实现

import pandas as pd

df = pd.DataFrame({'col1': [1, 2], 'col2': [3, 4]})
df2 = pd.DataFrame({'col1': [14, 22], 'col2': [32, 22]})

# 把两个表纵向拼起来,重置索引方便分组
combined_df = pd.concat([df, df2]).reset_index(drop=True)

# 每两行一组(对应两个表的同一位置行),检查组内所有列值是否完全一致
verify_results = combined_df.groupby(combined_df.index // 2).apply(
    lambda group: group.nunique().eq(1).all()
)

# 把校验结果对应到每一行
combined_df['Verify'] = verify_results.repeat(2).values

print(combined_df)

运行结果

col1  col2  Verify
0     1     3   False
1     2     4   False
2    14    32   False
3    22    22    True

额外技巧

如果两个表行数差异大,或者有主键可以关联,也可以用merge先关联再对比;要是想查看每个单元格的具体差异,用compare方法更直观:

# 查看单元格级别的详细差异
diff_details = df.compare(df2, keep_shape=True, keep_equal=True)
print(diff_details)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 08:24:14