これは、両方の/右のみ/値が残っているかどうかを伝えるために列を追加します:
In [2]:
A = pd.DataFrame({'x':np.arange(5)})
B = pd.DataFrame({'x':np.arange(3,8)})
print(A)
print(B)
x
0 0
1 1
2 2
3 3
4 4
x
0 3
1 4
2 5
3 6
4 7
In [3]:
pd.merge(A,B, how='outer', indicator=True)
Out[3]:
x _merge
0 0.0 left_only
1 1.0 left_only
2 2.0 left_only
3 3.0 both
4 4.0 both
5 5.0 right_only
6 6.0 right_only
7 7.0 right_only
その後、結果は上のDFを合併フィルタリングすることができます_merge
COL:
In [4]:
merged = pd.merge(A,B, how='outer', indicator=True)
merged[merged['_merge'] == 'left_only']
Out[4]:
x _merge
0 0.0 left_only
1 1.0 left_only
2 2.0 left_only
またisin
を使用していないBの値を見つけるために、マスクを否定することができます
In [5]:
A[~A['x'].isin(B['x'])]
Out[5]:
x
0 0
1 1
2 2
ちょうど 'A ['X']。isin(B ['X'])'を使ってAに固有の値を見て、逆にすることができます – EdChum
また、私は 'pd.merge '_X'、indicator = True、how = 'outer')'これは '_merge' colを追加して動作します。これは' left_only'、 'right_only'という値を持ち、左/右のみ – EdChum