Pandas - 每列的百分比值
Pandas - Values as percentage for of each Column
我还是初学者,刚遇到这个问题
我有一个 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
看起来很容易,但我很挣扎...
除以 sum
与 DataFrame.div
,然后乘以 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
我还是初学者,刚遇到这个问题
我有一个 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
看起来很容易,但我很挣扎...
除以 sum
与 DataFrame.div
,然后乘以 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