大熊猫数据框从上一年的同月获得滞后值

时间:2019-04-18 13:09:13

标签: python-3.x pandas dataframe

我有以下数据框:

           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列的最后2个值的平均值。例如,对于id = 1845、2011年和第6个月,我想要平均值为05/2010和04/2010。我怎样才能做到这一点?我的实际数据帧很大,有很多ID,每个ID大约有3年的历史数据。

1 个答案:

答案 0 :(得分:1)

  1. 枢轴旋转,使'Year'在索引中。
  2. 跟上shift以落后一年。
  3. 然后stackshift并使用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