Как я могу сбросить изменение pct в NaN, если другое значение столбца отличается от предыдущего ряда? - PullRequest
2 голосов
/ 05 марта 2019

У меня есть датафрейм (df) примерно так:

Year |  Name  |  Count
2017   John       1
2018   John       2
2019   John       3
2017   Fred       1
2018   Fred       2
2019   Fred       3

df['pct_chg']=df['Count'].pct_change() выход

Year |  Name  |  Count  |  pct_chg
2017   John       1         NaN
2018   John       2         1
2019   John       3         .5
2017   Fred       1       -.66
2018   Fred       2         1
2019   Fred       3        .5

Сохраняя столбцы одинаковыми, есть ли способ заставить pct_change() перезапускаться, когда Name является новым значением? Кажется, что нет никаких параметров для установки этого в документации.

желаемый вывод:

Year |  Name  |  Count  |  pct_chg
    2017   John       1       NaN
    2018   John       2         1
    2019   John       3        .5
    2017   Fred       1       NaN
    2018   Fred       2         1
    2019   Fred       3        .5

Изменение является поверхностным, но оно помогает с новыми глазами

1 Ответ

1 голос
/ 05 марта 2019

Вы можете использовать:

df['pct_chg']=df.groupby([df.Name.ne(df.Name.shift()).cumsum(),'Name'])['Count'].\
                                                   apply(lambda x: x.pct_change())
print(df)

   Year  Name  Count  pct_chg
0  2017  John      1      NaN
1  2018  John      2      1.0
2  2019  John      3      0.5
3  2017  Fred      1      NaN
4  2018  Fred      2      1.0
5  2019  Fred      3      0.5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...