ron*_*ydw 4 python time-series slice pandas
有以下时间序列:
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
Run Code Online (Sandbox Code Playgroud)
如何在特定日期切片+/- 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
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
这将创建两个工作日的抵消.您还可以对其他时间单位或甚至时间单位组合进行任意偏移.现在有了起点和delta,您可以以标准方式智能切片:
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
Run Code Online (Sandbox Code Playgroud)
这种方法的好处是间隔没有与行数相关联.因此,举例来说,如果您有每小时数据,也许还有一些缺失点,您仍然可以完全以相同的方式捕获两个工作日.或者,如果您的数据源恰好包含周末数据,但您仍需要+/- 2个工作日.
| 归档时间: |
|
| 查看次数: |
2664 次 |
| 最近记录: |