2017-08-02 13 views
1

私は2つのデータフレームを両方に存在する列に基づいてマージしようとしています。パンダ内部のマージ/結合すべての行を返す

所望の結果は次のとおりです。希望の結果が得られていない

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を表します)

どこが間違っていますか?私はすでに3つ目のGoogleページに到達しましたが、これは何も解決しません。私が何をするにしても、両方のセットのすべての行を持つ外部結合が得られます。

+0

あなたのコードは、どのような結果を与えるのでしょうか? – WNG

+0

@マックス私が理解できないことは、このコードが実際に正しい結果を出すということです。 –

+0

@MaxUそれらは同じことを表していますが、わずかに異なります.1つはnullでないint64で、もう1つはint64です。それが問題だろうか? – mannaroth

答えて

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 
関連する問題