python - Pandas 将列转换为总数的百分比

标签 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%

这似乎应该在 pandas 的能力范围内,但我就是想不通。

提前致谢!

最佳答案

您可以使用基本的 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 之间的比例(或者您可以跳过这一步,将它们存储为比例)。

关于python - Pandas 将列转换为总数的百分比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42006346/

相关文章:

python - django 中找不到或不存在图像文件

python - pydrive如何通过id/title读取文件

python - pandas 通过另一个数据框更新数据框并按列分组

python - 使用 max() 函数的数据框列值

python - 如何让 Treeview 列适合其所在的框架

python - 属性错误 : module 'django.db.models' has no attribute 'MultiPolygonField'

python - 是否可以使用 pyinstaller 来构建带有我自己的图标的 exe?

python - 如何确保在子项在装饰器中覆盖它之前始终调用父方法?

python - 将具有重复索引的系列数据附加到 pandas 数据框列

python - 如何从列表中删除每个项目的方括号