交叉检查两个df是否有不同的值并打印任何if



我有两个df,如果两个df中的值不同,我想检查id,所以我需要打印它们。

的例子:

df1 = |id |check_column1|
|1|abc|
|1|bcd|
|2|xyz|
|2|mno|
|2|mmm|
df2 = 
|id |check_column2|
|1|bcd|
|1|abc|
|2|xyz|
|2|mno|
|2|kkk|

这里的输出应该是|2|mmm|kkk|但我得到了整个表作为输出,因为索引不同

这就是我所做的

output = pd.merge(df1,df2, on= ['id'], how='inner')
event4 = output[output.apply(lambda x: x['check_column1'] != x['check_column2'], axis=1)]

想法是在两列中对每个id的值进行排序,并通过GroupBy.cumcount与helper计数器连接,然后可能过滤不匹配的行:

df1 = df1.sort_values(['id','check_column1'])
df2 = df2.sort_values(['id','check_column2'])

df = pd.merge(df1,df2, left_on= ['id',df1.groupby('id').cumcount()], 
right_on= ['id',df2.groupby('id').cumcount()])
output = df[df['check_column1'] != df['check_column2']]
print (output)
id  key_1 check_column1 check_column2
2   2      0           mmm           kkk

您可以使用np。

df1 = pd.DataFrame({'id':[1,1,2,2,2],'check_column1':['abc','bcd','xyz','mno','mmm']})
df2 = pd.DataFrame({'id':[1,1,2,2,2],'check_column2':['bcd','abc','xyz','mno','kkk']})
output = pd.merge(df1,df2, on= ['id'], how='inner')
event4 = np.where(output['check_column1']!=output['check_column2'],output[['id','check_column1']],output[['id','check_column2']])

输出:

array([[2, 'mmm'],
[2, 'kkk']], dtype=object)
mask = np.where((df1['id'] != df2['id']) | (df1['check_column1'] != df2['check_column2']), True, False)
output = df2[mask]

相关内容

最新更新