我有两个数据集:
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