我有两个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]