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

如何在Pandas中筛选两DataFrame同ID但数值不同的数据?

解决不同索引DataFrame中相同ID但数值不同的行筛选问题

没问题,我来帮你搞定这个需求!既然两个DataFrame的索引不一致,但都有共同的id列,咱们可以通过按id合并+筛选差异行的方式轻松解决。

步骤1:按id合并两个DataFrame

首先,我们用pandas.merge()方法,指定以id作为匹配键,并且用inner连接(只保留两个表中都存在的id,刚好符合我们找相同id的需求)。这样就能把两个表中同一个id对应的valueA和valueB放到同一行里。

import pandas as pd

# 按id合并两个DataFrame,保留共同id的行
merged_df = pd.merge(df1, df2, on='id', how='inner')

步骤2:筛选数值不同的行

合并完成后,我们只需要筛选出valueA和valueB不相等的行,就是你要的目标数据:

# 筛选id相同但数值不同的行
diff_rows = merged_df[merged_df['valueA'] != merged_df['valueB']]

# 打印结果看看
print(diff_rows)

针对你提供的示例数据,运行后会得到这样的结果:

id  valueA  valueB
0  255    1141    1231
1   91    1130    1170
2  347     830     870
5  159     715     734

额外小技巧:保留原表索引

如果你需要对应回原来两个DataFrame的索引,可以在合并时加上left_index=True和right_index=True,这样结果里会包含原表的索引列(默认命名为index_x和index_y):

merged_df_with_index = pd.merge(df1, df2, on='id', how='inner', left_index=True, right_index=True)
diff_rows_with_index = merged_df_with_index[merged_df_with_index['valueA'] != merged_df_with_index['valueB']]

这样你就能清楚看到这些差异行在原df1和df2中的位置啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:07:57