在pandas中,可以使用asfreq来选择采样的具体时间吗?

Jac*_*ott 5 python date time-series dataframe pandas

我在 pandas DataFrame 中有一些详细的时间序列数据,如下所示:

                      last   returns
time                                
1990-01-02 09:47:00  21.80       NaN
1990-01-02 09:48:00  21.82  0.000917
1990-01-02 09:49:00  21.82  0.000000
1990-01-02 09:50:00  21.80 -0.000917
1990-01-02 09:51:00  21.86  0.002752
1990-01-02 09:52:00  21.87  0.000457
1990-01-02 09:53:00  21.82 -0.002286
1990-01-02 09:54:00  21.83  0.000458
1990-01-02 09:55:00  21.85  0.000916
...                    ...       ...
Run Code Online (Sandbox Code Playgroud)

我想过滤它,只留下可被 5 整除的分钟数据,如下所示。为了得到这个,我使用了以下代码:

df.truncate(before='1990-01-02 09:50:00').asfreq('5T')
Run Code Online (Sandbox Code Playgroud)
                      last   returns
time                                
1990-01-02 09:50:00  21.80 -0.000917
1990-01-02 09:55:00  21.85  0.000916
1990-01-02 10:00:00  21.79 -0.001375
1990-01-02 10:05:00  21.84 -0.000458
1990-01-02 10:10:00  21.91  0.000914
1990-01-02 10:15:00  21.88  0.000000
1990-01-02 10:20:00  21.87 -0.000457
1990-01-02 10:25:00  21.92 -0.000456
1990-01-02 10:30:00  21.93  0.000913
...                    ...       ...
Run Code Online (Sandbox Code Playgroud)

这段代码显然不能很好地概括。pandas 中是否有功能可以让我获取通用 DataFrame 的 5 分钟数据?请注意,以下代码给出以下输出。它会查看第一个可用时间,并在该时间之后每 5 分钟提取一个条目。

df.asfreq('5T')
Run Code Online (Sandbox Code Playgroud)
                      last   returns
time                                
1990-01-02 09:47:00  21.80       NaN
1990-01-02 09:52:00  21.87  0.000457
1990-01-02 09:57:00  21.85  0.000458
1990-01-02 10:02:00  21.84  0.001835
1990-01-02 10:07:00  21.85 -0.000914
1990-01-02 10:12:00  21.88  0.000915
1990-01-02 10:17:00  21.88  0.000915
1990-01-02 10:22:00  21.92  0.000913
1990-01-02 10:27:00  21.90  0.000914
...                    ...       ...
Run Code Online (Sandbox Code Playgroud)

ALo*_*llz 2

resample+asfreq

只要频率能整除一天,或者能被一天整除:

分组的箱根据时间序列起点当天的开始进行调整。

df.resample('5T').asfreq()

                      last   returns
time                                
1990-01-02 09:45:00    NaN       NaN
1990-01-02 09:50:00  21.80 -0.000917
1990-01-02 09:55:00  21.85  0.000916
Run Code Online (Sandbox Code Playgroud)

因此,您可以使用参数offsetif明确更改起点pandas >= '1.1.0'

df.resample('5T', offset='2T').asfreq()

                      last   returns
time                                
1990-01-02 09:47:00  21.80       NaN
1990-01-02 09:52:00  21.87  0.000457
Run Code Online (Sandbox Code Playgroud)