pandas 交叉检查两个df是否有不同的值,如果有则打印任何值

plupiseo  于 2022-11-27  发布在  其他
关注(0)|答案(3)|浏览(150)

我有两个df,我想检查的id,如果值不同,在两个df,如果是这样,我需要打印这些。
例如:
第一个
这里的输出应该是|2|嗯|kkk|但由于索引不同,我将整个表作为输出
这就是我所做的

output = pd.merge(df1,df2, on= ['id'], how='inner')

event4 = output[output.apply(lambda x: x['check_column1'] != x['check_column2'], axis=1)]
0kjbasz6

0kjbasz61#

想法是在两列中按id对值进行排序,并按GroupBy.cumcount与助手计数器连接,然后可以过滤不匹配的行:

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
2w3kk1z5

2w3kk1z52#

您可以使用np.where来实现这一点。

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)
eagi6jfj

eagi6jfj3#

mask = np.where((df1['id'] != df2['id']) | (df1['check_column1'] != df2['check_column2']), True, False)

output = df2[mask]

相关问题