如何取时间序列数据中每三天的平均值
how to take average of the values per three days in a timeseries data
我有一个时间序列数据,如下所示:
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
中是否有方便的方法来做到这一点?如果有人可以分享相关资源,那就太好了!
感谢任何帮助!
您可以使用 agg
由楼层划分创建的 numpy 数组:
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
Numpy
数组支持even-space选择:
>>> 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
应该完成工作。
我有一个时间序列数据,如下所示:
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
中是否有方便的方法来做到这一点?如果有人可以分享相关资源,那就太好了!
感谢任何帮助!
您可以使用 agg
由楼层划分创建的 numpy 数组:
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
Numpy
数组支持even-space选择:
>>> 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
应该完成工作。