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

看起来很容易,但我很挣扎...

除以 sumDataFrame.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