我怎样才能找出两个数据框中同名列之间的差异?我的意思是,我有一个名为 X 的数据框 A,还有一个名为 X 的数据框 B,如果我执行 pd.merge(A, B, ...
我怎样才能找出两个数据框中同名列之间的差异?我的意思是,我有一个数据框 A,其中有一列名为 X,数据框 B 也有一列名为 X,如果我这样做 pd.merge(A, B, on=['X'])
,我将获得 A 和 B 的公共 X 值,但是我怎样才能获得“非公共”值?
如果将合并类型更改为 how='outer'
, indicator=True
这将添加一列来告诉您值是仅左/两者/右:
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
然后,您可以在 col 上过滤结果合并的 df _merge
:
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