如何确保我们在PD.Merge期间不会失去行



df1:df2:

  Column1  Column2  Column3           ColumnA  ColumnB ColumnC
0    a        x        x            0    c        y       y
1    c        x        x            1    e        z       z
2    e        x        x            2    a        s       s
3    d        x        x            3    d        f       f
4    h        x        x
5    k        x        x            

df1.merge(df2,left_on ='column1',right_on ='columna')

如何知道与H和K的行会丢失?

我知道pd.merge函数上的='left'选项,但是我如何识别没有匹配的值并同时执行内部加入?

我是否需要首先执行='左',然后打印columnna是nan的列,然后删除这些?

编辑

用例就是以下内容:客户提供2个文件,说文件1中的第1列将始终在文件2的A列中具有匹配。

然后,我们想要一种安全的方法来断言,在违反此事时打印错误消息

如果需要查找所有不同的值,则使用isinboolean indexing

a = df1.loc[~df1['Column1'].isin(df2['ColumnA']), 'Column1']
print (a)
4    h
5    k
Name: Column1, dtype: object

进行检查是否可能在反向掩码中计数True s,并与0进行比较:

a = (~df1['Column1'].isin(df2['ColumnA'])).sum() == 0
print (a)
False

对于更快的解决方案,请使用numpynumpy.setdiff1d

a = np.setdiff1d(df1['Column1'], df2['ColumnA'])
print (a)
['h' 'k']
a = len(np.setdiff1d(df1['Column1'], df2['ColumnA'])) == 0
print (a)
False

最新更新