假设我有一个时间序列数据帧,如下所示:
(附注:下面的值不是我的真实数据,我的真实数据是2010年到2018年)
forecast
Jan-10 1
Feb-10 1
Mar-10 1
Apr-10 1
May-10 1
Jun-10 1
Jul-10 1
Aug-10 1
Sep-10 1
Oct-10 1
Nov-10 1
Dec-10 1
Jan-11 2
Feb-11 2
Mar-11 2
Apr-11 2
May-11 2
Jun-11 2
Jul-11 2
Aug-11 2
Sep-11 2
Oct-11 2
Nov-11 2
Dec-11 2
Jan-12 3
Feb-12 3
Mar-12 3
Apr-12 3
May-12 3
Jun-12 3
Jul-12 3
Aug-12 3
Sep-12 3
Oct-12 3
Nov-12 3
Dec-12 3我想创建一个名为"avg_recent_year“的新专栏,它是最近一年的平均数据(比它高出12个月的平均数据)。
forecast avg_recent_year
Jan-10 1
Feb-10 1
Mar-10 1
Apr-10 1
May-10 1
Jun-10 1
Jul-10 1
Aug-10 1
Sep-10 1
Oct-10 1
Nov-10 1
Dec-10 1
Jan-11 2 1
Feb-11 2 1
Mar-11 2 1
Apr-11 2 1
May-11 2 1
Jun-11 2 1
Jul-11 2 1
Aug-11 2 1
Sep-11 2 1
Oct-11 2 1
Nov-11 2 1
Dec-11 2 1
Jan-12 3 2
Feb-12 3 2
Mar-12 3 2
Apr-12 3 2
May-12 3 2
Jun-12 3 2
Jul-12 3 2
Aug-12 3 2
Sep-12 3 2
Oct-12 3 2
Nov-12 3 2
Dec-12 3 2我不确定如何编写python代码来解决这个问题,因为我有9年的数据,所以我不能在没有迭代的情况下手动完成,否则它将是一个很长的代码。
有人能帮我解决这个问题吗?
发布于 2020-03-03 12:04:19
这就是你要找的
>>> df = pd.DataFrame({'forecast': [ i for i in range(25)]})
>>> df
forecast
0 0
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10
11 11
12 12
13 13
14 14
15 15
16 16
17 17
18 18
19 19
20 20
21 21
22 22
23 23
24 24
>>> df["avg_recent_year"] = df["forecast"].rolling(12).mean()
>>> df
forecast avg_recent_year
0 0 NaN
1 1 NaN
2 2 NaN
3 3 NaN
4 4 NaN
5 5 NaN
6 6 NaN
7 7 NaN
8 8 NaN
9 9 NaN
10 10 NaN
11 11 5.5
12 12 6.5
13 13 7.5
14 14 8.5
15 15 9.5
16 16 10.5
17 17 11.5
18 18 12.5
19 19 13.5
20 20 14.5
21 21 15.5
22 22 16.5
23 23 17.5
24 24 18.5发布于 2020-03-03 12:05:07
您可以使用滚动平均值来实现这一点(请参阅https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.rolling.html):
df['avg_recent_year'] = df['forecast'].rolling(12).mean()https://stackoverflow.com/questions/60499763
复制相似问题