gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 22:47:59 24 4
gpt4 key购买 nike

我正在处理时间序列中的高频数据,我想从我的数据中获取所有工作日。我的数据观察以秒为间隔,因此每天有 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(周三)到 2013-01-04(周五)是一月第一周的第一个工作日,那么:

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 内置命令,但找不到合适的命令,因为它们按天汇总,而没有考虑每一天都包含子列。也就是说,每一秒都有一个值,它们不应该被平均,只是组合在一起成为一个新的系列..

例如我试过:

  1. ts.asfreq(BDay()) --> 找到工作日但对每一天取平均值
  2. ts.resample() --> 你必须定义“如何”(平均值、最大值、最小值...)
  3. ts.groupby(lambda x : x.weekday) --> 也不是!
  4. ts = pd.Series(df, index = pd.bdate_range(start = '2013/01/01 00:00:00', end = '2013/01/31 23:59:59' ,频率 = 'S')) --> df 因为原始数据是 DataFramem。 使用 pd.bdate_range 没有帮助,因为 df 和索引必须在同一维度..

我在 pandas 文档中搜索过,用谷歌搜索过但找不到线索...
有人有想法吗?

非常感谢您的帮助!

谢谢!

附注我宁愿不为此使用循环,因为我的数据集非常大......(我还有其他月份要分析)

最佳答案

不幸的是,这有点慢,但至少应该给出您正在寻找的答案。

#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)]

关于python - 使用 Python/Pandas 提取时间序列中的工作日,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25597200/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com