我怎样才能找出两个数据框中同名列之间的差异?我的意思是,我有一个名为 X 的数据框 A,还有一个名为 X 的数据框 B,如果我执行 pd.merge(A, B, ...
我怎样才能找出两个数据框中同名列之间的差异?我的意思是,我有一个数据框 A,其中有一列名为 X,数据框 B 也有一列名为 X,如果我这样做 pd.merge(A, B, on=['X'])
,我将获得 A 和 B 的公共 X 值,但是我怎样才能获得“非公共”值?
接受的答案给出了所谓的 LEFT JOIN IF NULL
两个 中除匹配行之外的所有行 ,而不仅仅是左边的行。您必须向过滤器添加另一个条件,因为您想排除所有位于 both
.
在这种情况下,我们使用 DataFrame.merge
& DataFrame.query
:
df1 = pd.DataFrame({'A':list('abcde')})
df2 = pd.DataFrame({'A':list('cdefgh')})
print(df1, '\n')
print(df2)
A
0 a # <- only df1
1 b # <- only df1
2 c # <- both
3 d # <- both
4 e # <- both
A
0 c # both
1 d # both
2 e # both
3 f # <- only df2
4 g # <- only df2
5 h # <- only df2
df = (
df1.merge(df2,
on='A',
how='outer',
indicator=True)
.query('_merge != "both"')
.drop(columns='_merge')
)
print(df)
A
0 a
1 b
5 f
6 g
7 h