如何在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
相关产品推荐
相关产品推荐

