我还是一个初学者,只是遇到了这个问题。
我有一个78行×138列的数据框,看起来像这样:
2009-01 2009-02 2009-03 2009-04 ...
name1 1 1 3 1
name2 0 1 1 1
name3 1 1 1 0
我想要类似的东西
2009-01 2009-02 2009-03 2009-04 ...
name1 50% 33% 60% 50%
name2 0 33% 20% 50%
name3 50% 33% 20% 0
看起来很简单,但我正在努力...
答案 0 :(得分:1)
用DataFrame.div
除以sum
,然后用100
除以-输出为数值:
df1 = df.div(df.sum()).mul(100).round()
print (df1)
2009-01 2009-02 2009-03 2009-04
name1 50.0 33.0 60.0 50.0
name2 0.0 33.0 20.0 50.0
name3 50.0 33.0 20.0 0.0
如果需要所有值百分比:
df = df.div(df.sum()).mul(100).astype(int).astype(str).add('%')
print (df)
2009-01 2009-02 2009-03 2009-04
name1 50% 33% 60% 50%
name2 0% 33% 20% 50%
name3 50% 33% 20% 0%
如果要为不带0
的所有值添加百分数(像所有字符串数据的字符串一样使用0
):
df3 = df.div(df.sum()).mul(100).astype(int).astype(str).add('%').mask(df.eq(0), '0')
print (df3)
2009-01 2009-02 2009-03 2009-04
name1 50% 33% 60% 50%
name2 0 33% 20% 50%
name3 50% 33% 20% 0