Процентное изменение с групповым питоном - PullRequest
0 голосов
/ 22 сентября 2018

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

Year    Month   Booked
0   2016    Aug 55999.0
6   2017    Aug 60862.0
1   2016    Jul 54062.0
7   2017    Jul 58417.0
2   2016    Jun 42044.0
8   2017    Jun 48767.0
3   2016    May 39676.0
9   2017    May 40986.0
4   2016    Oct 39593.0
10  2017    Oct 41439.0
5   2016    Sep 49677.0
11  2017    Sep 53969.0

Я хочу получить процентное изменение по сравнению с тем же месяцем прошлого года.Я пробовал следующий код:

df['pct_ch'] = df.groupby(['Month','Year'])['Booked'].pct_change()

, но я получаю следующее, что совсем не то, что я хочу:

Year    Month   Booked  pct_ch
0   2016    Aug 55999.0 NaN
6   2017    Aug 60862.0 0.086841
1   2016    Jul 54062.0 -0.111728
7   2017    Jul 58417.0 0.080556
2   2016    Jun 42044.0 -0.280278
8   2017    Jun 48767.0 0.159904
3   2016    May 39676.0 -0.186417
9   2017    May 40986.0 0.033017
4   2016    Oct 39593.0 -0.033987
10  2017    Oct 41439.0 0.046624
5   2016    Sep 49677.0 0.198798
11  2017    Sep 53969.0 0.086398

1 Ответ

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

Не groupby Год , иначе вы не получите, например, Aug 2017 и Aug 2016 вместе.Также используйте transform для трансляции результатов в исходные индексы

Попробуйте:

df['pct_ch'] = df.groupby(['Month'])['Booked'].transform(lambda s: s.pct_change())

    Year    Month   Booked  pct_ch
0   2016    Aug     55999.0 NaN
6   2017    Aug     60862.0 0.086841
1   2016    Jul     54062.0 NaN
7   2017    Jul     58417.0 0.080556
2   2016    Jun     42044.0 NaN
8   2017    Jun     48767.0 0.159904
3   2016    May     39676.0 NaN
9   2017    May     40986.0 0.033017
4   2016    Oct     39593.0 NaN
10  2017    Oct     41439.0 0.046624
5   2016    Sep     49677.0 NaN
11  2017    Sep     53969.0 0.086398
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...