【问题标题】:how to take average of the values per three days in a timeseries data如何在时间序列数据中取每三天的平均值
【发布时间】:2017-01-25 22:00:00
【问题描述】:

我有一个如下所示的时间序列数据:

datetime    | value
2016-01-01  | 1
2016-01-02  | 14
2016-01-03  | 3
2016-01-04  | 15
2016-01-05  | 5
2016-01-06  | 4
2016-01-07  | 7
2016-01-08  | 15

我想要获得的是每三天(以及每周)的平均值,并将最后一天作为索引,如下所示:

datetime    | value
2016-01-03  | 6
2016-01-06  | 8
2016-01-08  | 11

您可能会注意到剩下的 2 条记录只需要平均。在 pandas dataframe 或 graphlab SFrame 中是否有一种方便的方法来执行此操作?如果有人可以分享相关资源,那就太好了!

感谢您的帮助!

【问题讨论】:

    标签: python pandas dataframe graphlab sframe


    【解决方案1】:

    您可以通过楼层划分创建的numpy数组使用agg

    print (np.arange(len(df.index)) // 3)
    [0 0 0 1 1 1 2 2]
    
    df = df.groupby(np.arange(len(df.index)) // 3).agg({'datetime': 'last', 'value': 'mean'})
    print (df)
         datetime  value
    0  2016-01-03      6
    1  2016-01-06      8
    2  2016-01-08     11
    

    【讨论】:

      【解决方案2】:

      Numpy数组支持偶数空间选择:

      >>> import numpy as np
      >>> l = np.arange(10)
      >>> l
      array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
      >>> l[0::3]
      array([0, 3, 6, 9])
      

      Pandas 系列大部分时间都支持 Numpy 功能。在您的情况下,而不是从索引 0,在 for 循环中从 0 迭代到 2 应该可以完成工作。

      【讨论】:

        猜你喜欢
        • 2015-08-10
        • 2019-09-13
        • 2017-01-03
        • 2012-08-17
        • 1970-01-01
        • 2017-04-19
        • 2016-06-29
        • 1970-01-01
        相关资源
        最近更新 更多