2016-04-06 23 views
2

bir paylaşım işlevi uygular Ben benziyor aşağıdaki dfsatır pandalar hakkında 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']]) 

var: Ben çizgi ile her gider payını hesaplamak istiyorum ama bulmuyorum

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

. Bu gibi bakmak gerekir:

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

ve sonuçlar şöyle olacaktır:

 Apple Banana Tomato 
Joe 0.35 0.27 0.37 
.  .  .  . 

Ama lamda işlevi içinde her satırın max hesaplamak için bir yol bulamıyorum. Birisi fikri var mı? Şimdiden teşekkürler!

cevap

2

Eğer sum sıra sıra tarafından div istiyorum: Eğer hassas ayarlamak isterseniz

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 

sen round arayabilirsiniz:

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

Eğer div işlevi tam olarak ne açıklayabilir misiniz? Anladığım kadarıyla sadece bölünmüş değil, haritalama + bölme hakkı mı? –

+1

Bu yüzden df'nin sonucun sonucuna dayandığı şey, endeks ve sütunları hizalamasıdır, bunun nasıl çalıştığını görmek için diğer cevabımı görebilirsiniz: http://stackoverflow.com/questions/29954263/what-/29955358 #-vadeli-yayın-ortalamasını-in-pandalar-dokümantasyon yapar 29955358 – EdChum