Панды - общая сумма за каждую дату - PullRequest
0 голосов
/ 01 мая 2018

Полное размышление о мозге с тем, что должно быть простой рутиной панд, - но мне не повезло найти ответ.

У меня есть фрейм данных с тремя интересными для этого столбцами - пример ниже.

Все, что я хотел бы сделать, это добавить новый столбец с именем «Pct_Day», в котором берется процент от каждой суммы идентификационной даты и делится на общую сумму по всем идентификаторам на эту дату.

Таким образом, для приведенного ниже примера результат для первой строки (7/7/17, ID: 553, сумма: 3) будет равен 0,25000 (3 / (3 + 4 + 5))

Спасибо за вашу помощь - нужно вернуться на качелях Панд ...

df_dict={'DateOf': ['2017-08-07','2017-08-07','2017-08-07','2017-08-04','2017-08-04','2017-08-04'
                , '2017-08-03','2017-08-03','2017-08-03'], 'ID': ['553','559','914','553','559','914','553','559','914'], 'Amount': [3, 4, 5, 9, 11, 10, 3, 9, 10]}

df=pd.DataFrame(df_dict)

Ответы [ 2 ]

0 голосов
/ 01 мая 2018

Вот шаги:

Шаг 1: Рассчитать сумму Amount для каждой даты

df['sum'] = df['Amount'].groupby(df['DateOf']).transform('sum')

Шаг 2: Рассчитайте процент, используя сумму

df['pct_day'] = df['Amount'] / df['sum'] * 100

Выход:

   Amount      DateOf   ID  sum    pct_day
0       3  2017-08-07  553   12  25.000000
1       4  2017-08-07  559   12  33.333333
2       5  2017-08-07  914   12  41.666667
3       9  2017-08-04  553   30  30.000000
4      11  2017-08-04  559   30  36.666667
5      10  2017-08-04  914   30  33.333333
6       3  2017-08-03  553   22  13.636364
7       9  2017-08-03  559   22  40.909091
8      10  2017-08-03  914   22  45.454545

Наконец,

Шаг 3: отбросить столбец суммы

df.drop('sum', axis=1, inplace=True)

Вы также можете сделать это в одну строку, например:

df['pct_day'] = df['Amount'] / df['Amount'].groupby(df['DateOf']).transform('sum') * 100
0 голосов
/ 01 мая 2018

Вам просто нужно transform и div

df['New']=df.Amount/df.groupby(['DateOf']).Amount.transform('sum')
df
Out[51]: 
   Amount      DateOf   ID       New
0       3  2017-08-07  553  0.250000
1       4  2017-08-07  559  0.333333
2       5  2017-08-07  914  0.416667
3       9  2017-08-04  553  0.300000
4      11  2017-08-04  559  0.366667
5      10  2017-08-04  914  0.333333
6       3  2017-08-03  553  0.136364
7       9  2017-08-03  559  0.409091
8      10  2017-08-03  914  0.454545
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...