Pandas内部合并/连接返回所有行

时间:2017-08-02 21:41:49

标签: python pandas merge inner-join

我正在尝试根据两者中存在的列合并两个数据帧,只保留两个集合的交集。

期望的结果是:

 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)

我哪里错了?我已经到了第三个谷歌页面试图解决这个问题。无论我做什么,我得到一个外连接,两组中的所有行。

1 个答案:

答案 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