pandas将列转换为总计的百分比

时间:2017-02-02 15:39:39

标签: python pandas

我有一个包含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%

这似乎应该在熊猫的能力范围内,但我无法弄明白。

提前致谢!

3 个答案:

答案 0 :(得分:10)

您可以使用基本的pandas运算符.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之间的比例(或者您可以跳过此步骤并将其存储为比例)。

答案 1 :(得分:0)

df/df.sum()

如果要除以行总和,请先对其进行转置。

答案 2 :(得分:0)

Tim Tian的答案对我来说很有效,但是如果您有一个包含几列的df并想对%列进行明智的操作,也许这会有所帮助。

df_pct = df/df[df.columns].sum()*100

我遇到了麻烦,因为我想将pd.pivot_table的结果表示为%,但无法正常工作。因此,我只是在结果表本身上使用了该代码,它就起作用了。