Разделите на sum
на DataFrame.div
, а затем умножьте на 100
- на выходе будут числовые c значения:
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