2016-04-13 2 views
2

私は比較的単純な問題があります。二つのパンダのデータフレーム:DataFramesの単純なマージ

a b 
one 1 2 

a c 
one 1 3 

そして私は、私はpd.joinとpd.concatを試してみました

a b c 
one 1 2 3 

取得したい、私は行または列を複製与えます、 pd.mergeはデータをマージしますが、インデックス名は失われます。

<!-- language: Python --> 
a=pd.DataFrame({'a':{'one':1},'c':{'one':3}}) 
b=pd.DataFrame({'a':{'one':1},'b':{'one':2}}) 
pd.merge(a,b) 

pd.merge(a,b) 

    a c b 
0 1 3 2 

私はパンダに関する些細な何かを逃したか、間違った方法で問題を解決しようとした可能性があることを認めます。

+0

:N pd.mergeを使用してleft_indexまたはright_indexを維持するためにどのインデックスを指定し、ここではそれがどのように動作するかです'one':1}、 'c':{'one':3}、 'b':{'one':2}}) ' – jezrael

+0

サンプルデータはおそらく複数の行になるはずです。このような単純なデータで誤った結論を得るのは簡単です。たとえば、これに期待される出力は何ですか? 'df1 = pd.DataFrame({'a:[1,2]、' b ':[2,1]}、index = [' one '、' two '])' 'df2 = pd.DataFrame ({'':[1,1,2]、 'b':[2,2,1]}、index = ['one'、 'one'、 'two']) ' – Alexander

+0

@jezraelが指してくれてありがとうソート順を抜けて、私はより完全なあなたの答えを受け入れました。 – kakk11

答えて

4

私はあなたがmergeにパラメータleft_indexright_indexonを追加しsort_indexことができると思います。

print pd.merge(a,b, left_index=True, right_index=True, on='a').sort_index(axis=1) 
    a b c 
one 1 2 3 

興味深い、pandasバージョン0.18.0に一つだけ指定することができます - それは前pandasバージョン0.17.2で、left_indexまたはright_indexをエラー:

print pd.merge(a,b, left_index=True, on='a').sort_index(axis=1) 
    a b c 
one 1 2 3 

print pd.merge(a,b, right_index=True, on='a').sort_index(axis=1) 
    a b c 
one 1 2 3 
+0

私は列の順序を考慮してあなたを助けてくれたので、私はあなたを支持しました。とにかく重要とは思わないが、必要とされるときはいつでも並べ替えることができる。 – MedAli

+0

MedAli、ありがとうございます。私は驚きでした。 :) – jezrael

+0

a.merge(b、...)は少し読みやすいIMOです。 +1なし。 – Alexander

1

{:受け入れ答えは希望 `印刷pd.DataFrame({「A」など、さまざまな出力を持っているので、質問を編集してください

>>> pd.merge(a,b, on='a', left_index=True) 
    a c b 
one 1 3 2 
>>> 
+0

ありがとう、私はそれがより複雑なデータ構造で動作させることができる場合は試してみます。 – kakk11

+0

ええと、列の順序が間違っています... – jezrael

+0

@jezrael does not matter? – MedAli