【问题标题】:Boolean comparison of each value across two data frames两个数据帧中每个值的布尔比较
【发布时间】:2021-07-09 19:32:05
【问题描述】:

我有两个数据框(从 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.x pandas


【解决方案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

【讨论】:

    猜你喜欢
    • 2018-06-14
    • 1970-01-01
    • 2018-09-30
    • 2019-07-21
    • 1970-01-01
    • 2021-09-16
    • 1970-01-01
    • 2018-01-15
    • 1970-01-01
    相关资源
    最近更新 更多