首页 > 解决方案 > 两个数据帧中每个值的布尔比较

问题描述

我有两个具有相同列但可能不同行的数据框(从 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 不够灵活?任何建议将不胜感激!

标签: python-3.xpandas

解决方案


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

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

推荐阅读