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