2016-04-06 71 views
2

我有以下的DF應用共享功能DF

Array = np.array([[87, 70, 95], 
    [52, 47, 44], 
    [44, 97, 94], 
    [79, 36, 2]]) 

df_test = pd.DataFrame(Array, columns=['Apple', 'Banana', 'Tomato'],index=[['Joe', 'Steve', 'Wes', 'Jim']]) 

它看起來像:

 Apple Banana Tomato 
Joe  87  70  95 
Steve  52  47  44 
Wes  44  97  94 
Jim  79  36  2 

我要計算由線各費用的份額,但我沒有找到。它必須看起來像:

df_test.apply(lambda: x/max(line),axis=2) 

,其結果將是:

 Apple Banana Tomato 
Joe 0.35 0.27 0.37 
.  .  .  . 

但我找不到計算lambda函數內部各行的最大的方式。有人有想法嗎? 在此先感謝!

回答

2

divsum逐行:

In [111]: 
df_test.div(df_test.sum(axis=1), axis=0) * 100 

Out[111]: 
      Apple Banana Tomato 
Joe 0.345238 0.277778 0.376984 
Steve 0.363636 0.328671 0.307692 
Wes 0.187234 0.412766 0.400000 
Jim 0.675214 0.307692 0.017094 

如果你想設置精度可以撥打round

In [112]: 
df_test.div(df_test.sum(axis=1), axis=0).round(2) 

Out[112]: 
     Apple Banana Tomato 
Joe  0.35 0.28 0.38 
Steve 0.36 0.33 0.31 
Wes  0.19 0.41 0.40 
Jim  0.68 0.31 0.02 
+0

你能不能解釋一下什麼是DIV功能究竟怎麼辦?如果我明白,它不是分裂的,它是映射+分裂的權利? –

+1

因此,它將df與總結果分開,這也是它對齊索引和列,你可以看到我的其他答案,看看它是如何工作的:http://stackoverflow.com/questions/29954263/what-確實,在長期的廣播起點均在-大熊貓的文檔/ 29955358#29955358 – EdChum