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

如何识别两个Pandas DataFrame中的差异行?

如何找出两个DataFrame的差异行?

针对你给出的场景(df2比df1多了一行索引16、值为6.4308的记录),可以用以下几种方式获取差异:

方法1:使用merge的indicator参数标记来源

通过合并两个DataFrame并标记每行的来源,筛选出仅存在于df2的行:

# 合并两个DataFrame,添加来源标记列
merged_df = pd.merge(df1, df2, how='outer', indicator=True)
# 筛选仅存在于df2的行
diff_rows = merged_df[merged_df['_merge'] == 'right_only']
print(diff_rows)

输出结果会包含df2独有的行,同时保留原数据的索引信息。

方法2:用concat结合duplicated找出差异

将两个DataFrame合并后标记重复行,剩余的即为差异行:

# 合并两个DataFrame并添加来源标识
combined = pd.concat([df1.assign(source='df1'), df2.assign(source='df2')])
# 找出仅在单个DataFrame中出现的行
diff_rows = combined[~combined.duplicated(subset=['x(m)'], keep=False)]
# 筛选仅来自df2的差异行
df2_diff = diff_rows[diff_rows['source'] == 'df2']
print(df2_diff)

这种方式能直观区分差异行属于哪个原始DataFrame。

方法3:逐行对比索引与值(适用于有序DataFrame)

如果两个DataFrame是按顺序排列的,可直接对比对应位置的值,定位不匹配的索引:

# 对齐索引后对比值,生成差异掩码
mask = df2['x(m)'] != df1['x(m)'].reindex(df2.index, fill_value=None)
# 获取df2中的差异行
diff_rows = df2[mask]
print(diff_rows)

该方法适合数据顺序一致的场景,能快速定位df2中与df1对应位置不同的行。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 22:53:16