通过多个列连接两个数据集,并标记发生不匹配的列



我有两个数据集:

df_1 = 
my_id      col_1    col_2       value
ABC111       null      289      374578
ABC113        456      279      335368
ADC110        757      289      374568
ABC145        366      299      374578
ACC122       null      289      374220
df_2
my_id      col_1    col_2       value_new
ABC000       null      289          374578
ABC113        456      279          330008
ADC110        757     null          374568
ABC145        366      299          374578
ACC122       null      289          374229
ACC999       null      289          374229

为了查看df_1或df_2中缺少哪些行,我对所有4列进行了完整连接。这样,我就能看到哪些行不匹配,有多少行不匹配。问题是,我想看因为哪个列不匹配.

的期望输出:

missing_keys_from_df_1 =
my_id      col_1    col_2       value_new  my_id_check col_1_check col_2_check val_check   
ABC000       null      289          374578         No          Yes         Yes       Yes
ABC113        456      279          330008         Yes         Yes         Yes       No
ADC110        757     null          374568         Yes         Yes         No        Yes
ABC145        366      299          374578         Yes         Yes         Yes       Yes
ACC122       null      289          374229         Yes         No          No        No
ACC999       null      289          374229         No          No          No        No

所以,基本上,我想要复制df_2并添加4个布尔列来检查该列的值是否在df_1这可能吗?

如果在ID上连接,则可以这样实现。如果您希望id也被检查,那么我们可能必须连接其他不会给出预期结果的列。

SELECT COALESCE(df_1.my_id,df_2.my_id)
,COALESCE(df_1.col_1, df_2.col_1) col_1
,COALESCE(df_1.col_2, df_2.col_2) col_2
,COALESCE(value,value_new) value
,CASE WHEN df_1.col_1 = df_2.col_1 THEN 'YES' ELSE 'NO' END col_1_check
,CASE WHEN df_1.col_2 = df_2.col_2 THEN 'YES' ELSE 'NO' END col_2_check
,CASE WHEN df_1.value = df_2.value_new THEN 'YES' ELSE 'NO' END value_check
FROM df_1
FULL OUTER JOIN df_2 on df_1.my_id = df_2.my_id

相关内容

最新更新