我正在尝试根据两者中存在的列合并两个数据帧,只保留两个集合的交集。
期望的结果是:
foo bar foobar
x y z x j i x y z j i
a 1 2 a 9 0 a 1 2 9 0
b 3 4 b 9 0 b 3 4 9 0
c 5 6 c 9 0 c 5 6 9 0
d 7 8 e 9 0
f 9 0
我的代码没有产生预期的结果:
pd.merge(foo, bar, how='inner', on='x')
相反,代码似乎返回:
foo bar foobar
x y z x j i x y z j i
a 1 2 a 9 0 a 1 2 9 0
b 3 4 b 9 0 b 3 4 9 0
c 5 6 c 9 0 c 5 6 9 0
d 7 8 e 9 0 e * * 9 0
f 9 0 f * * 9 0
(其中*代表NaN)
我哪里错了?我已经到了第三个谷歌页面试图解决这个问题。无论我做什么,我得到一个外连接,两组中的所有行。
答案 0 :(得分:1)
通常意味着您在用于加入的列中有重复项,从而产生笛卡尔积。
演示:
In [35]: foo
Out[35]:
x y z
0 a 1 2
1 b 3 4
2 c 5 6
3 d 7 8
In [36]: bar
Out[36]:
x j i
0 a 9 0
1 b 9 0
2 a 9 0
3 a 9 0
4 b 9 0
In [37]: pd.merge(foo, bar)
Out[37]:
x y z j i
0 a 1 2 9 0
1 a 1 2 9 0
2 a 1 2 9 0
3 b 3 4 9 0
4 b 3 4 9 0