2012-04-11 16 views
14

私は馬鹿ではないと思っていますが、おそらく私は間違っています。誰も私になぜこれが動作していないことを説明することはできますか?私は 'merge'を使って、望ましい結果を達成することができます。しかし、最終的には複数のpandasDataFramesに参加する必要がありますので、このメソッドを機能させる必要があります。パンダ:単純な「参加」が機能していませんか?

In [2]: left = pandas.DataFrame({'ST_NAME': ['Oregon', 'Nebraska'], 'value': [4.685, 2.491]}) 

In [3]: right = pandas.DataFrame({'ST_NAME': ['Oregon', 'Nebraska'], 'value2': [6.218, 0.001]}) 

In [4]: left.join(right, on='ST_NAME', lsuffix='_left', rsuffix='_right') 
Out[4]: 
    ST_NAME_left value ST_NAME_right value2 
0  Oregon 4.685   NaN  NaN 
1  Nebraska 2.491   NaN  NaN 

答えて

12

merge(http://pandas.pydata.org/pandas-docs/stable/merging.html#database-style-dataframe-joining-merging)を使用してみてください:

In [14]: right 
Out[14]: 
    ST_NAME value2 
0 Oregon 6.218 
1 Nebraska 0.001 

In [15]: merge(left, right) 
Out[15]: 
    ST_NAME value value2 
0 Nebraska 2.491 0.001 
1 Oregon 4.685 6.218 

In [18]: merge(left, right, on='ST_NAME', sort=False) 
Out[18]: 
    ST_NAME value value2 
0 Oregon 4.685 6.218 
1 Nebraska 2.491 0.001 

DataFrame.joinちょっとしたレガシーメソッドで、明らかにon-columnジョインをしません(もともと、onパラメータを使ってカラム上のインデックスを作成したため、 "legacy"という指定がありました)。

+2

興味深い。だから、私が望むものを得るためには、 'merge'は2つのDataFramesだけを取るので、連続するマージを実行する必要がありますか? – Phil

+0

私は同じ問題があり、この答えを見つけました。あたりです。 0.16.2ドキュメントより:関連するDataFrame.joinメソッドは、インデックス上のインデックスとインデックス上の列の結合に内部的にmergeを使用しますが、共通の列に結合しようとするのではなく、デフォルトでインデックスに結合します(マージのデフォルトの動作)。 jdmarino

関連する問題