当另一列的值与上一行不同时,如何将pct更改重置为NaN?

时间:2019-03-05 17:03:59

标签: python-3.x pandas dataframe

我有一个数据框(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 个答案:

答案 0 :(得分:1)

您可以使用:

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