Bru*_*llo 5 python dataframe pandas
假设我有以下数据帧:
df = pd.DataFrame({'city': ['a', 'a', 'a', 'b', 'b', 'c', 'd', 'd', 'd'],
'year': [2013, 2014, 2016, 2015, 2016, 2013, 2016, 2017, 2018],
'value': [10, 12, 16, 20, 21, 11, 15, 13, 16]})
Run Code Online (Sandbox Code Playgroud)
我想找出每个城市和年份的价值与前一年相比的百分比变化。我的最终数据框将是:
city year value
a 2013 NaN
a 2014 0.20
a 2016 NaN
b 2015 NaN
b 2016 0.05
c 2013 NaN
d 2016 NaN
d 2017 -0.14
d 2018 0.23
Run Code Online (Sandbox Code Playgroud)
我尝试在城市中使用一个组,然后使用 apply 但它没有用:
df.groupby('city').apply(lambda x: x.sort_values('year')['value'].pct_change()).reset_index()
Run Code Online (Sandbox Code Playgroud)
它没有用,因为我无法得到年份,也因为这样我正在考虑所有城市的所有年份,但事实并非如此。
编辑:我不太关心效率,所以任何解决问题的解决方案对我都是有效的。
让我们尝试 lazy groupby(),pct_change用于更改并diff检测年份跳跃:
groups = df.sort_values('year').groupby(['city'])
df['pct_chg'] = (groups['value'].pct_change()
.where(groups['year'].diff()==1)
)
Run Code Online (Sandbox Code Playgroud)
输出:
city year value pct_chg
0 a 2013 10 NaN
1 a 2014 12 0.200000
2 a 2016 16 NaN
3 b 2015 20 NaN
4 b 2016 21 0.050000
5 c 2013 11 NaN
6 d 2016 15 NaN
7 d 2017 13 -0.133333
8 d 2018 16 0.230769
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
57 次 |
| 最近记录: |