Получение процента от общего числа в панде - PullRequest
0 голосов
/ 20 сентября 2018

У меня есть датафрейм, настроенный следующим образом:

date_string | type | amount

 2015-01-01 |  a   | 500

 2015-01-01 |  b   | 300

 2015-01-01 |  c   | 200

 2015-01-02 |  a   | 400

 2015-01-02 |  b   | 600

 2015-01-02 |  c   | 100

Я ищу, чтобы добавить новый столбец с общим процентом в разбивке по дате и получить что-то вроде этого:

date_string | type | amount | percent

 2015-01-01 |  a   | 500    | 0.5

 2015-01-01 |  b   | 300    | 0.3

 2015-01-01 |  c   | 200    | 0.2

 2015-01-02 |  a   | 300    | 0.3

 2015-01-02 |  b   | 600    | 0.6

 2015-01-02 |  c   | 100    | 0.1

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018

Это будет работать

import numpy as np
df.groupby(['amount', 'date_string']).sum().transform(lambda x: x/np.sum(x))
0 голосов
/ 20 сентября 2018

Используйте GroupBy.transform с sum, что делится на исходный столбец на Series.div:

df['percent'] = df['amount'].div(df.groupby('date_string')['amount'].transform('sum'))
print (df)
  date_string type  amount   percent
0  2015-01-01    a     500  0.500000
1  2015-01-01    b     300  0.300000
2  2015-01-01    c     200  0.200000
3  2015-01-02    a     400  0.363636
4  2015-01-02    b     600  0.545455
5  2015-01-02    c     100  0.090909
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...