Сводная таблица в pandas: aggfun c сумма в диапазоне дат - PullRequest
0 голосов
/ 17 февраля 2020

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

#               Date      Name  RG
#-----------------------------------
#      1: 2013-04-25     NameA   1
#      2: 2013-04-25     NameB   3
#      3: 2013-04-25     NameC   1
#      4: 2013-04-25     NameD   2
#      5: 2013-04-25     NameE   1
#     ---                                                                              
#  13379: 2020-02-13     NameA   3
#  13380: 2020-02-13     NameB   1
#  13381: 2020-02-13     NameC   4
#  13382: 2020-02-13     NameD   1
#  13383: 2020-02-13     NameE   1

Я хочу повернуть таблицу и использовать столбец Имя в качестве индекса. Каждый Дата теперь отображается как отдельный столбец, так что для каждого Имя индекс RG суммируется в течение последних шести месяцев, например, значение RG для NameA в 2020-02-06 получается путем добавления всех значений RG для NameA между 2019-08-07 и 2020-02-06. Например:

#          Name     2013-04-25      2013-04-31      2013-05-07   ---   2020-02-06      2020-02-13
#--------------------------------------------------------------------------------------------------
#      1: NameA     1               2               3                  7               23
#      2: NameB     3               3               6                  15              21
#      3: NameC     1               4               5                  16              24
#      4: NameD     2               2               7                  19              40
#      5: NameE     1               4               9                  15              21
#     ---                                                                              
#    276: NameDE    3               4               6                  15              22
#    277: NameDF    1               4               6                  17              22
#    278: NameDG    4               8               9                  11              23
#    279: NameDH    2               3               5                  19              24
#    280: NameDI    1               4               6                  18              20

Я мог бы повернуть таблицу с помощью следующего:

df.pivot_table(
    values='RG', index='Name', columns='Date',
    fill_value=0, aggfunc='sum')

Однако значения в каждом столбце должны быть совокупной суммой всех значений за предыдущие шесть месяцев. для того же Имя . Как я могу изменить aggfun c для достижения sh такой цели?

1 Ответ

0 голосов
/ 20 февраля 2020

Я нашел ответ сам. Перед поворотом необходимо сгенерировать сумму за выбранный период, выполнив следующую процедуру:

for index, row in df.iterrows():
    currentDate = row['Date']
    previousDate = row['Date'] - pd.DateOffset(months=12)
    name = row['Name']
    mask = (df['Date'] > previousDate) & (df['Date'] <= currentDate) & (df['Name'] == name)
    s = df.loc[mask]['RG'].sum()
    df4.loc[index,'RG'] = s
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...