Итерация для создания нового столбца из средних данных за прошлый год (данные временных рядов) - PullRequest
0 голосов
/ 03 марта 2020

Допустим, у меня есть временной ряд данных временного ряда, наподобие этого:

(ps приведенное ниже значение не мои реальные данные, а мои реальные данные с 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 лет, поэтому я не могу сделать это вручную без итерации, или это будет длинный код ..

Может кто-нибудь помочь мне решить эту проблему?

Ответы [ 2 ]

1 голос
/ 03 марта 2020

Вы можете достичь этого с помощью скользящего среднего (см. https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.rolling.html):

df['avg_recent_year'] = df['forecast'].rolling(12).mean()
0 голосов
/ 03 марта 2020

Это то, что вы ищете,

>>> 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
...