python-3.x - 熊猫数据框从去年同月获取滞后值
问题描述
我有以下数据框:
Id Year Month Amount
0 1845 2010.0 1.0 18480.0
1 1845 2010.0 2.0 19560.0
2 1845 2010.0 3.0 23160.0
3 1845 2010.0 4.0 26360.0
4 1845 2010.0 5.0 31560.0
5 1845 2010.0 6.0 36080.0
6 1845 2010.0 7.0 35440.0
7 1845 2010.0 8.0 32960.0
8 1845 2010.0 9.0 33560.0
9 1845 2010.0 10.0 24240.0
10 1845 2010.0 11.0 24080.0
11 1845 2010.0 12.0 19680.0
12 1845 2011.0 1.0 18400.0
13 1845 2011.0 2.0 17960.0
14 1845 2011.0 3.0 20200.0
15 1845 2011.0 4.0 25560.0
16 1845 2011.0 5.0 29240.0
17 1845 2011.0 6.0 29160.0
18 1845 2011.0 7.0 29480.0
19 1845 2011.0 8.0 31000.0
20 1845 2011.0 9.0 25920.0
21 1845 2011.0 10.0 22560.0
22 1845 2011.0 11.0 25120.0
23 1845 2011.0 12.0 19640.0
24 1845 2012.0 1.0 20800.0
25 1845 2012.0 2.0 18880.0
26 1845 2012.0 3.0 21960.0
27 1845 2012.0 4.0 26920.0
28 1845 2012.0 5.0 28280.0
29 1845 2012.0 6.0 29160.0
30 1845 2012.0 7.0 32520.0
31 1845 2012.0 8.0 29720.0
32 1845 2012.0 9.0 28880.0
33 1845 2012.0 10.0 23760.0
34 1845 2012.0 11.0 22040.0
35 1845 2012.0 12.0 21960.0
对于每个 id,我想去上一年的同一个月并获得 Amount 列最后两个值的平均值。例如,对于 id=1845、2011 年和第 6 个月,我想要 05/2010 和 04/2010 的金额值的平均值。我怎样才能做到这一点?我的实际数据框非常大,每个 id 都有很多 id 和大约 3 年的历史数据。
解决方案
- 枢轴使得
'Year'
在索引中。 - 跟进
shift
滞后一年。 - 然后
stack
,shift
并使用rolling(2).mean()
d = df.pivot_table('Amount', 'Year', ['Id', 'Month'])
d.shift().stack().shift().rolling(2).mean().stack().rename('Amount').reset_index()
Year Month Id Amount
0 2011.0 3.0 1845 19020.0
1 2011.0 4.0 1845 21360.0
2 2011.0 5.0 1845 24760.0
3 2011.0 6.0 1845 28960.0
4 2011.0 7.0 1845 33820.0
5 2011.0 8.0 1845 35760.0
6 2011.0 9.0 1845 34200.0
7 2011.0 10.0 1845 33260.0
8 2011.0 11.0 1845 28900.0
9 2011.0 12.0 1845 24160.0
10 2012.0 1.0 1845 21880.0
11 2012.0 2.0 1845 19040.0
12 2012.0 3.0 1845 18180.0
13 2012.0 4.0 1845 19080.0
14 2012.0 5.0 1845 22880.0
15 2012.0 6.0 1845 27400.0
16 2012.0 7.0 1845 29200.0
17 2012.0 8.0 1845 29320.0
18 2012.0 9.0 1845 30240.0
19 2012.0 10.0 1845 28460.0
20 2012.0 11.0 1845 24240.0
21 2012.0 12.0 1845 23840.0
推荐阅读
- javascript - 如何使用 React-router-dom 版本 6 useNavigate 和 typescript 传递参数
- r - Looping several dataframes into individual csv files in R
- r - Is abind console output incorrect?
- alexa - Alexa 技能默认意图覆盖
- javascript - JS:安装 readline-sync 后,断言 `(argc) == (5)' 失败。错误
- laravel - 不能在 Laravel + Vue 项目中使用 dd() 和 var_dump 内部函数?
- python - Tensorflow LSTM 比特币预测平线
- ruby-on-rails - 在带有postgresql的rails 6中使用order_by表达式和不同的true
- java - 有没有办法在构造函数中使用 Lombok 的 @builder 和一组有限的属性?
- mysql - 从 Mysql(Mariadb) 数据库中删除倒数第二行