两个数据帧中每个值的布尔比较

时间:2019-02-20 03:50:05

标签: python-3.x pandas

我有两个数据框(从csvs读取),具有相同的列,但可能不同的行。我正在尝试产生第三个数据框,该数据框的左侧为索引,并且每列的TRUE或FALSE值均与给定的索引记录匹配。这是一个简单的例子

df1 = pd.DataFrame(np.array([
    ['100', 'a', 1, 'aa'],
    ['101', 'b', 2, 'bb'],
    ['102', 'c', 3, 'cc']]),
    columns=['ID', 'Col1', 'Col2', 'Col3']).set_index('ID')
df2 = pd.DataFrame(np.array([
    ['100', 'a', 1, 'aa'],
    ['101', 'b', 2, 'bb'],
    ['102', 'c', 3, 'cb']]),
    columns=['ID', 'Col1', 'Col2', 'Col3']).set_index('ID')

df3 = pd.DataFrame(np.where(df1==df2,True,False),
                   columns=df1.columns,
                   index=df1.index)
print(df3)

这将产生:

ID                    
100  True  True   True
101  True  True   True
102  True  True  False

我的问题是记录的数量将有所不同,并且可能会出现故障。 df1中可能存在ID为104的行,而df2中可能存在ID为105的行。这将引发“只能比较标记相同的DataFrame对象”错误。

我在想np.where不够灵活吗?任何建议将不胜感激!

1 个答案:

答案 0 :(得分:1)

在这种情况下,您可能需要使用eq

df1.eq(df2)
      Col1   Col2   Col3
ID                      
100   True   True   True
101   True   True   True
102  False  False  False
105  False  False  False