【发布时间】:2014-10-25 04:08:48
【问题描述】:
我正在处理时间序列中的高频数据,我想从我的数据中获取所有工作日。我的数据观察以秒为单位,所以每天有 86400 秒,我的数据集分布在 31 天(所以有 2,678,400 个观察!)。
这是我的(部分)数据:
In[1]: ts
Out[1]:
2013-01-01 00:00:00 0.480928
2013-01-01 00:00:01 0.480928
2013-01-01 00:00:02 0.483977
2013-01-01 00:00:03 0.486725
2013-01-01 00:00:04 0.486725
...
2013-01-31 23:59:56 0.451630
2013-01-31 23:59:57 0.451630
2013-01-31 23:59:58 0.451630
2013-01-31 23:59:59 0.454683
Freq: S, Length: 2678400
我想做的是创建一个新的时间序列,其中包含本月的工作日,但我希望它们具有相应的数据秒数。 例如,如果 2013 年 1 月 2 日(星期三)到 2013 年 1 月 4 日(星期五)是 1 月第一周的第一个工作日,那么:
2013-01-02 00:00:00 0.507477
2013-01-02 00:00:01 0.501373
...
2013-01-03 00:00:00 0.489778
2013-01-03 00:00:01 0.489778
...
2013-01-04 23:59:58 0.598115
2013-01-04 23:59:59 0.598115
Freq: S, Length: 259200
所以它当然会排除 2013 年 1 月 5 日和 2013 年 1 月 6 日星期六的所有数据,因为这些是周末。 等等……
我尝试使用一些 pandas 内置命令,但找不到合适的命令,因为它们按天聚合,而没有考虑到每一天都包含子列。也就是说,每一秒都有一个值,它们不应该被平均,只是组合在一起形成一个新的系列..
例如我试过:
-
ts.asfreq(BDay())--> 找到工作日,但每天的平均值 -
ts.resample()--> 你必须定义“如何”(平均值、最大值、最小值...) -
ts.groupby(lambda x : x.weekday)--> 也不是! -
ts = pd.Series(df, index = pd.bdate_range(start = '2013/01/01 00:00:00', end = '2013/01/31 23:59:59' , freq = 'S'))--> df 因为原始数据是 DataFramem。 使用 pd.bdate_range 并没有帮助,因为 df 和 index 必须在同一维度中..
我在 pandas 文档中搜索,谷歌搜索但找不到线索...
有人有想法吗?
非常感谢您的帮助!
谢谢!
附言 我宁愿不使用循环,因为我的数据集非常大...... (我还有其他月份要分析)
【问题讨论】:
标签: python pandas time-series