我有两个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)]
0kjbasz61#
想法是在两列中按id对值进行排序,并按GroupBy.cumcount与助手计数器连接,然后可以过滤不匹配的行:
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
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)
eagi6jfj3#
mask = np.where((df1['id'] != df2['id']) | (df1['check_column1'] != df2['check_column2']), True, False) output = df2[mask]
3条答案
按热度按时间0kjbasz61#
想法是在两列中按
id
对值进行排序,并按GroupBy.cumcount
与助手计数器连接,然后可以过滤不匹配的行:2w3kk1z52#
您可以使用np.where来实现这一点。
输出量:
eagi6jfj3#