比较数据框列与条件

我有 2 个数据框,如下所示:


df1:


ID   col1   col2    

1     A1     B1    

2     A2     B2     

3     A3     B3   

4     A4     B4   

5     A5     B5    

6     A6     B6    

df2:


col1   col2   

 A1     B1     

 A2     O5   

 H3     B3     

 A4     B4    

 A5     66     

 A6     C6     

预期结果:我想根据条件生成结果 df - df1 的 col1,col2 中的每个值都应存在于 df2 的 col1,col2 值中


预期结果 df:


ID   col1   col2     Error

1     A1     B1      No mismatch with df2

2     A2     B2      col2 mismatch with df2

3     A3     B3      col1 mismatch with df2

4     A4     B4      No mismatch with df2

5     A5     B5      col2 mismatch with df2

6     A6     B6      col2 mismatch with df2


慕码人8056858
浏览 198回答 2
2回答

白板的微信

使用字典理解创建助手 DataFrame 并与以下内容进行比较isin:m = pd.DataFrame({c: ~df1[c].isin(df2[c]) for c in ['col1','col2']})print (m)    col1   col20  False  False1  False   True2   True  False3  False  False4  False   True5  False   True然后numpy.where使用 mask byany测试True每行至少一个,并dot使用矩阵乘法获取列名:df1['Error'] = np.where(m.any(axis=1),                         m.dot(m.columns + ', ').str.rstrip(', ') + ' mismatch with df2',                        'No mismatch with df2')print (df1)   ID col1 col2                   Error0   1   A1   B1    No mismatch with df21   2   A2   B2  col2 mismatch with df22   3   A3   B3  col1 mismatch with df23   4   A4   B4    No mismatch with df24   5   A5   B5  col2 mismatch with df25   6   A6   B6  col2 mismatch with df2

慕娘9325324

像这样的事情应该可以解决问题,但可能有更简单的方法。diff = pd.concat([df1[col] == df2[col] for col in df1], axis=1)def m(row):    mismatches = []    for col in diff.columns:        if not row[col]:            mismatches.append(col)    if mismatches == []:        return 'No mismatch'    return 'Mismatches: ' + ', '.join(mismatches)df1['Error'] = diff.apply(m, axis=1)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python