如何识别两个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
相关产品推荐
相关产品推荐

