gpt4 book ai didi

python - 在 +/- 2 个工作日的日期切片 pandas 时间序列

转载 作者:太空狗 更新时间:2023-10-30 01:59:30 25 4
gpt4 key购买 nike

具有以下时间序列:

In [65]: p
Out[65]:
Date
2008-06-02 125.20
2008-06-03 124.47
2008-06-04 124.40
2008-06-05 126.89
2008-06-06 122.84
2008-06-09 123.14
2008-06-10 122.53
2008-06-11 120.73
2008-06-12 121.19
Name: SPY

我如何在特定日期 +/- 2 个相邻(工作)日进行切片,即如​​果 d = '2008-06-06':

 -2   2008-06-04    124.40
-1 2008-06-05 126.89
0 2008-06-06 122.84
1 2008-06-09 123.14
2 2008-06-10 122.53

最佳答案

Pandas 内置了一些非常不错的工作日功能,可以自动处理这个问题。对于这个确切的问题,它实际上最终会增加一些代码,但它会非常轻松地处理更一般的情况。

In [1]: ind = pd.date_range('2008-06-02', '2008-06-12', freq='B')

In [2]: p = pd.Series(np.random.random(len(ind)), index=ind)

In [3]: p
Out[3]:
2008-06-02 0.606132
2008-06-03 0.328327
2008-06-04 0.842873
2008-06-05 0.272547
2008-06-06 0.013640
2008-06-09 0.357935
2008-06-10 0.517029
2008-06-11 0.992851
2008-06-12 0.053158
Freq: B, dtype: float64

In [4]: t0 = pd.Timestamp('2008-6-6')

In [5]: from pandas.tseries import offsets

In [6]: delta = offsets.BDay(2)

这将产生两个工作日的抵消。您还可以任意偏移其他时间单位,甚至组合时间单位。现在有了起点和增量,您就可以按照标准方式进行智能切片:

In [7]: p[t0 - delta:t0 + delta]
Out[7]:
2008-06-04 0.842873
2008-06-05 0.272547
2008-06-06 0.013640
2008-06-09 0.357935
2008-06-10 0.517029
Freq: B, dtype: float64

这种方法的优点是间隔与行数无关。因此,例如,如果您有每小时的数据并且可能有一些缺失点,您仍然可以完全相同的方式捕获两个工作日。或者,如果您的数据源恰好也有周末数据,但您仍然需要 +/- 2 个工作日。

关于python - 在 +/- 2 个工作日的日期切片 pandas 时间序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14092339/

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