2017-02-02 61 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