2015-09-27 49 views
0

我有兩個熊貓數據框。使用鍵合併兩個大熊貓數據框並將其分開的最佳方式

DF1

 unique numerator 
     23  4 
     29  10 

DF2

 unique denominator 

     23  2 
     29  5 

現在我想這樣

unique result 
    23   2 
    29   2 

不使用循環......或取其最有效的方式。它是一種分裂分子/分母

+0

你能解釋你如何得到結果嗎?它與'df2'完全相同(除了列名) – joris

+0

爲什麼兩行的結果不是2? – EdChum

+0

您的標題與您需要更新的問題毫無相似之處 – EdChum

回答

1

如果兩個DFS索引設置爲unique那麼你可以劃分2列:

In [6]: 
df.set_index('unique')['numerator']/df1.set_index('unique')['denominator'] 

Out[6]: 
unique 
23 2 
29 2 
dtype: float64 

或「獨一無二」合併,然後執行計算爲正常:

In [9]: 
merged=df.merge(df1, on='unique') 
merged 

Out[9]: 
    unique numerator denominator 
0  23   4   2 
1  29   10   5 

In [10]: 
merged['result'] = merged['numerator']/merged['denominator'] 
merged 

Out[10]: 
    unique numerator denominator result 
0  23   4   2  2 
1  29   10   5  2 
+0

第一個是完美的..非常感謝 –

2

EdChum提供了2個不錯的選擇。

另一種方法是使用div()或divide()函數。

df1 = pd.DataFrame ({'unique':[23,29],'numerator': [4,10]}) 
df2 = pd.DataFrame ({'unique':[23,29],'denominator': [2,5]}) 

df1.set_index('unique',inplace=True) 
df2.set_index('unique',inplace=True) 

print df1.div(df2['denominator'],axis=0) 

要注意的重要一點是,你需要通過一系列又名DF2 [ '分母']劃分

df1.div(df2,axis=0)會產生

 denominator numerator 
unique       
23    NaN  NaN 
29    NaN  NaN 

這是因爲標籤df2中的'分母'與df1中的'分子'不匹配。然而,一系列沒有列標籤,因爲它的值是廣播橫跨df1的列。