按索引和唯一索引比较两个数据帧



我想使用pd.Dataframe.eq((通过索引比较两个数据帧,以获得具有真/假值的数据帧

但是这两个数据帧有唯一的索引,所以我的意思是df1包含一个在df2中没有表示的索引,反之亦然。

我感兴趣的是,对于每行,df1的列"a"、"b"、"c"是否包含df2的相同值(0或1(

df1 = pd.DataFrame({'a':[1,1,1,1,1], 'b':[0,1,0,1,0], 'c':[1,0,0,1,1]}, index=['1_1', '1_2', '2_1', '2_2', '2_3'])
df2 = pd.DataFrame({'a':[0,1,1,1,1,0], 'b':[1,0,1,0,1,0], 'c':[1,1,1,1,1,0]}, index=['1_1', '1_2', '1_3', '2_2', '2_3', '2_4'])
df1.eq(df2)

产生

1_1,False,False,True
1_2,True,False,False
1_3,False,False,False
2_1,False,False,False
2_2,True,False,True
2_3,True,False,True
2_4,False,False,False

它应该看起来像

1_1,False,False,True
1_2,True,False,False
2_2,True,False,True
2_3,True,False,True

我不太确定如何处理唯一索引的问题。我曾考虑合并dfs,但后来我在比较列时遇到了麻烦

感谢的帮助

似乎您只想保留两个数据帧中存在的索引的比较结果,在这种情况下,您可以通过获得共同的索引集

idx = df1.index.intersection(df2.index)

然后

df1.loc[idx].eq(df2.loc[idx])

df1.eq(df2).loc[idx]

最新更新