python增加工作日列_使用Python / Pandas提取时间序列中的工作日

这篇博客讨论了如何在Python中,利用Pandas库处理时间序列数据,特别是从高频数据中筛选出工作日,并保持每一秒的数据。作者面临的问题是需要从秒级精度的31天数据中提取出工作日,同时保留原有的秒级观测值,而不进行平均等聚合操作。尝试了多种Pandas内置方法如`asfreq()`、`resample()`和`groupby()`,但未能得到满足需求的结果。博客中寻求避免使用循环的方法,因为数据量大,效率是关键。
摘要由CSDN通过智能技术生成

我正在使用时间序列中的高频数据,我希望从我的数据中获取所有工作日.我的数据观察以秒为单位,因此每天有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

我宁愿不使用循环,因为我的数据集非常大……

(我还有其他月份要分析)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值