我有一个包含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%
这似乎应该在熊猫的能力范围内,但我无法弄明白。
提前致谢!
答案 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的结果表示为%,但无法正常工作。因此,我只是在结果表本身上使用了该代码,它就起作用了。