【问题标题】:How to shift moving average when using "rolling" function?使用“滚动”功能时如何移动平均线?
【发布时间】:2019-01-29 22:01:27
【问题描述】:

我有以下 DataFrame 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

正如@jezrael 在thread 中所建议的那样,我使用以下代码计算了过去 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

【问题讨论】:

  • 你需要df["DELAY_LAST2HOURS"] = df["DELAY"].rolling("2H").mean().shift().fillna(0) 吗?
  • @jezrael:可能:)谢谢。

标签: python pandas


【解决方案1】:

如果想要移动 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

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

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

【讨论】:

    猜你喜欢
    • 2013-12-22
    • 2021-07-11
    • 1970-01-01
    • 2017-09-01
    • 1970-01-01
    • 2016-06-28
    • 2012-06-14
    • 2021-07-10
    • 2021-10-02
    相关资源
    最近更新 更多