2012-04-11 69 views
14

我喜歡認爲我不是白癡,但也許我錯了。任何人都可以向我解釋爲什麼這不起作用?我可以使用'合併'來達到理想的結果。但我最終需要加入多個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參數在列上進行索引,因此是「傳統」指定)。

+2

有趣。所以它看起來像是爲了得到我想要的,我將不得不執行連續合併,因爲'merge'只需要兩個DataFrame? – Phil 2012-04-12 02:06:53

+0

我有同樣的問題,並找到了這個答案。這是正確的。從0.16.2 docs:相關的DataFrame.join方法在內部使用合併索引索引和索引列連接,但默認情況下會在索引上進行連接,而不是嘗試在公共列上進行連接(合併的默認行爲)。 jdmarino 2015-08-18 14:19:15