2014-07-10 26 views
4

我有兩個數據幀,我想串聯(軸= 1)與內部聯接。其中dataframes有一些重複的指標,但是行不重複,我不想從那些丟失數據:熊貓:連接數據幀,並保持重複索引

df1 = pd.DataFrame([{'a':1,'b':2},{'a':1,'b':3},{'a':2,'b':4}], 
        columns = ['a','b']).set_index('a') 

df2 = pd.DataFrame([{'a':1,'c':5},{'a':2,'c':6}],columns = ['a','c']).set_index('a') 

>>> df1 
    b 
a 
1 2 
1 3 
2 4 
8 9 

>>> df2 
    c 
a 
1 5 
2 6 

默認concat行爲與NaN的,以填補缺失值:

>>> pd.concat([df1,df2]) 
    b c 
a 
1 2 NaN 
1 3 NaN 
2 4 NaN 
1 NaN 5 
2 NaN 6 

我想保留來自df1的重複索引,並使用df2中的重複值填充它們,但是在pandas 0.13.1中,列上的內部連接會產生錯誤。在最近版本的熊貓concat做我想要的:

>>> pd.concat([df1, df2], axis=1, join='inner') 
    b c 
a  
1 2 5 
1 3 5 
2 4 6 

什麼是最好的方式來實現我想要的結果?有沒有groupby解決方案?或者,也許我不應該使用concat

+1

我會用pd.merge改爲 – ZJS

+0

你運行的是什麼版本的熊貓?我正在運行'0.14.0' – EdChum

回答

3

可以進行合併,並把params從LHS和RHS使用索引:

In [4]:  
df1.merge(df2, left_index=True, right_index=True) 
Out[4]: 
    b c 
a  
1 2 5 
1 3 5 
2 4 6 

[3 rows x 2 columns] 

的毗連應該已經工作,它的工作對我來說:

In [5]: 

pd.concat([df1,df2], join='inner', axis=1) 
Out[5]: 
    b c 
a  
1 2 5 
1 3 5 
2 4 6 

[3 rows x 2 columns] 
+0

哦,真的嗎?我正在運行0.13.1。很不錯,他們顯然已經在0.14.0中解決了這個問題。我會在升級前後測試您的解決方案,然後在完成後接受。謝謝! – andbeonetraveler

+0

好吧,合併工作在0.13.1和0.14.0,所以謝謝你的解決方案。 Concat給了我0.13.1中'不能從重複索引中重新索引'的錯誤,而在0.14.0中我得到:'ValueError:傳遞值的形狀是(2,5),索引暗示(2,3)'。我想知道爲什麼...?我正在運行Python 3.3.5。 – andbeonetraveler

+0

@andbeonetraveler不知道我正在運行numpy 1.8.1和python 64位3.3 – EdChum