【问题标题】:Iteration to make a new column from past year average data (time series data)迭代从过去一年的平均数据(时间序列数据)创建一个新列
【发布时间】:2020-06-15 09:26:39
【问题描述】:

假设我有一个类似这样的时间序列数据框:

(p.s.以下数值不是我的真实数据,我的真实数据是从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 年的数据,所以我不能在没有迭代的情况下手动完成,否则代码会很长..

谁能帮我解决这个问题?

【问题讨论】:

  • 您只是在寻找df["forecast"].shift(12)吗?
  • 不,我不是。这只是一个示例数据..我真正想要的是过去一年的平均数据..

标签: python pandas numpy dataframe iteration


【解决方案1】:

这就是你要找的,

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

【讨论】:

    【解决方案2】:

    您可以通过滚动平均值来实现这一点(请参阅https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.rolling.html):

    df['avg_recent_year'] = df['forecast'].rolling(12).mean()
    

    【讨论】:

      猜你喜欢
      • 2016-11-14
      • 1970-01-01
      • 2022-10-14
      • 1970-01-01
      • 1970-01-01
      • 2014-10-16
      • 1970-01-01
      • 2021-12-22
      • 2022-11-24
      相关资源
      最近更新 更多