2017-02-02 89 views
4

我有4列的ID和三類一個數據幀的結果掉進大熊貓轉換列的總數的百分比

<80% 80-90 >90 
id 
1 2  4 4 
2 3  6 1 
3 7  0 3 

我想將其轉換爲百分比,即:

<80% 80-90 >90 
id 
1 20% 40% 40% 
2 30% 60% 10% 
3 70% 0% 30% 

這似乎應該在熊貓能力範圍內,但我無法弄清楚。

在此先感謝!

+1

請舉例數據框,您的號碼是有點硬,在第一眼解釋。 – instant

+0

我不知道如何發佈數據框,我appologize我的例子失去了它的格式,但我有一個指數的ID和colums <80%,80%-90%和> 90%。那麼我有行中的數據,所以第0行可能是[3,4,3]的iindex 1。我想排0索引1有30%,40%,30%。我對大熊貓很陌生,對不起,我仍然不好解釋。 – DTATSO

+0

我想它實際上看起來更是這樣的: 結果<80%,80%-90%,> 90% ID ,我想: 結果<80%,80 %-90%,> 90% id 1 30%40%30% 2 70%30%0% – DTATSO

回答

3

爲此,您可以使用基本的大熊貓運營商.div.sum,使用axis參數,以確保計算髮生你想要的方式:

cols = ['<80%', '80-90', '>90'] 
df[cols] = df[cols].div(df[cols].sum(axis=1), axis=0).multiply(100) 
  • 計算各列(df[cols].sum(axis=1)的總和。 axis=1使求和發生在行之間,而不是沿列向下。
  • 將數據框除以結果系列(df[cols].div(df[cols].sum(axis=1), axis=0)。 axis=0使分區跨列發生。
  • 要完成,乘以100結果讓他們的比例在0和100之間的百分比,而不是0和1之間
+0

非常感謝您的幫助。感謝您解釋這些部分。熊貓似乎是一個偉大的工具,希望我很快會好起來。 – DTATSO

+0

「比例」是百分比。 '0.1'是'10%'。 '%'基本上是一個「除以100」的運算符。把100放在那裏是錯誤的,並可能導致各種各樣的錯誤。 –

+0

@ChristophTerasa我不知道我關注。我知道你可以表達0.1或10%的相同數值,但OP要求後者。這是否會導致問題的出現取決於OP的使用案例 - 出於某種原因,可能需要使用%格式。 – ASGM