Pandas - значения в процентах для каждого столбца - PullRequest
1 голос
/ 18 июня 2020

Я все еще новичок и только что столкнулся с этой проблемой.

У меня есть фрейм данных с 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

Выглядит легко, но я борюсь ...

1 Ответ

1 голос
/ 18 июня 2020

Разделите на 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
...