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列中总是匹配。
然后,我们需要一种安全的方法来断言,在违反此规则时显示错误消息
最佳答案
如果需要找到所有不同的值,请在isin
和boolean 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/