代码之家  ›  专栏  ›  技术社区  ›  ScalaBoy

使用“滚动”功能时如何移动移动平均线?

  •  0
  • ScalaBoy  · 技术社区  · 6 年前

    我有以下数据帧df:

                       TIME     DELAY
    0   2016-01-01 06:30:00     0
    1   2016-01-01 14:10:00     2
    2   2016-01-01 07:05:00     2
    3   2016-01-01 11:00:00     1
    4   2016-01-01 10:40:00     0
    5   2016-01-01 08:10:00     7
    6   2016-01-01 11:35:00     2
    7   2016-01-02 13:50:00     2
    8   2016-01-02 14:50:00     4
    9   2016-01-02 14:05:00     1
    

    thread 通过@jezrael,我使用以下代码计算了过去2小时的滚动平均值。

    df["TIME"] = pd.to_datetime(df["TIME"])
    
    df = df.sort_values('TIME').set_index('TIME')
    df["DELAY_LAST2HOURS"] = df["DELAY"].rolling("2H").mean()
    print (df)
    

    这就是我得到的:

                         DELAY  DELAY_LAST2HOURS
    TIME                                        
    2016-01-01 06:30:00      0          0.000000
    2016-01-01 07:05:00      2          1.000000
    2016-01-01 08:10:00      7          3.000000
    2016-01-01 10:40:00      0          0.000000
    2016-01-01 11:00:00      1          0.500000
    2016-01-01 11:35:00      2          1.000000
    2016-01-01 14:10:00      2          2.000000
    2016-01-02 13:50:00      2          2.000000
    2016-01-02 14:05:00      1          1.500000
    2016-01-02 14:50:00      4          2.333333
    

    2016-01-01 06:30:00      0          0.000000
    2016-01-01 07:05:00      2          0.000000
    2016-01-01 08:10:00      7          1.000000
    2016-01-01 10:40:00      0          3.000000
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   jezrael    6 年前

    如果要按1行移位,请使用:

    df["DELAY_LAST2HOURS"] = df["DELAY"].rolling("2H").mean().shift().fillna(0)
    print (df)
                         DELAY  DELAY_LAST2HOURS
    TIME                                        
    2016-01-01 06:30:00      0               0.0
    2016-01-01 07:05:00      2               0.0
    2016-01-01 08:10:00      7               1.0
    2016-01-01 10:40:00      0               3.0
    2016-01-01 11:00:00      1               0.0
    2016-01-01 11:35:00      2               0.5
    2016-01-01 14:10:00      2               1.0
    2016-01-02 13:50:00      2               2.0
    2016-01-02 14:05:00      1               2.0
    2016-01-02 14:50:00      4               1.5
    

    编辑:0.24.0解决方案-参数 fill_value shift :

    df["DELAY_LAST2HOURS"] = df["DELAY"].rolling("2H").mean().shift(fill_value=0)
    print (df)
                         DELAY  DELAY_LAST2HOURS
    TIME                                        
    2016-01-01 06:30:00      0               0.0
    2016-01-01 07:05:00      2               0.0
    2016-01-01 08:10:00      7               1.0
    2016-01-01 10:40:00      0               3.0
    2016-01-01 11:00:00      1               0.0
    2016-01-01 11:35:00      2               0.5
    2016-01-01 14:10:00      2               1.0
    2016-01-02 13:50:00      2               2.0
    2016-01-02 14:05:00      1               2.0
    2016-01-02 14:50:00      4               1.5