我有一个数据框(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
此更改是肤浅的,但有助于使新名称更醒目
答案 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