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

DTA*_*TSO 10 python pandas

我有一个包含4列ID和3个类别的数据框

  <80% 80-90 >90
id
1   2     4    4
2   3     6    1
3   7     0    3
Run Code Online (Sandbox Code Playgroud)

我想把它转换成百分比,即:

   <80% 80-90 >90
id
1   20%   40%  40%
2   30%   60%  10%
3   70%    0%  30%
Run Code Online (Sandbox Code Playgroud)

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

提前致谢!

ASG*_*SGM 14

您可以使用基本的pandas运算符执行此操作,.div.sum使用axis参数确保计算以您希望的方式发生:

cols = ['<80%', '80-90', '>90']
df[cols] = df[cols].div(df[cols].sum(axis=1), axis=0).multiply(100)
Run Code Online (Sandbox Code Playgroud)
  • 计算每列的总和(df[cols].sum(axis=1). axis=1使得求和发生在行之间,而不是沿着列.
  • 用结果系列(df[cols].div(df[cols].sum(axis=1), axis=0)除以数据帧. axis=0使得除法发生在整个列上.
  • 要完成,请将结果相乘,100使它们的百分比在0到100之间,而不是0到1之间的比例.


小智 6

df/df.sum()
Run Code Online (Sandbox Code Playgroud)

如果要除以行的总和,请先转置它。