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函数上的how ='left'选项,但是如何识别不匹配的值并同时执行内部联接呢?

我需要首先执行how ='left',然后在columnA为NaN的情况下打印column1,然后将其删除吗?

编辑

用例如下:一个客户提供了2个文件,说文件1的column1在文件2的A列中总是匹配。

然后,我们需要一种安全的方法来断言,在违反此规则时显示错误消息

最佳答案

如果需要找到所有不同的值,请在isinboolean indexing中使用True

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


为了进行检查,可以在反掩码中计数0并与numpy比较:

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




要获得更快的解决方案,请在中使用numpy.setdiff1d

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

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

关于python - 如何确保在pd.merge期间不丢失任何行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47575489/

10-15 04:08
查看更多