我正在使用时间序列中的高频数据,我希望从我的数据中获取所有工作日.我的数据观察以秒为单位,因此每天有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-01-02(WED)到2013-01-04(星期五)是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-01-05和2013-01-06的所有数据,因为这些是周末.
等等…
我尝试使用一些pandas内置命令,但找不到合适的,因为它们在白天聚合而没有考虑到每天都包含子列.也就是说,每一秒都有一个值,它们不应该被平均,只是组合成一个新系列.
例如我试过:
> ts.asfreq(BDay()) – >查找工作日,但每天的平均值
> ts.resample() – >你必须定义’how'(mean,max,min ……)
> 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文档,谷歌搜索但找不到线索……
有人有想法吗?
我将衷心感谢您的帮助!
谢谢!
P.S
我宁愿不使用循环,因为我的数据集非常大……
(我还有其他月份要分析)
解决方法:
不幸的是,这有点慢,但至少应该给出你想要的答案.
#create an index of just the date portion of your index (this is the slow step)
ts_days = pd.to_datetime(ts.index.date)
#create a range of business days over that period
bdays = pd.bdate_range(start=ts.index[0].date(), end=ts.index[-1].date())
#Filter the series to just those days contained in the business day range.
ts = ts[ts_days.isin(bdays)]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。