据我所知,在Pandas中,滚动方法不包含将范围(在本例中为时间范围)指定为窗口/桶的方法。在
我在这里看到了一个类似的问题:Pandas: rolling mean by time interval 我知道我可以重新对数据进行采样,但对于大型数据集,这并不理想,尤其是在窗口大小相对较小的情况下。这里的解决方案也存在类似的问题:pandas rolling computation with window based on values instead of counts和{a3}
想象一下,如果我想计算一个数量加权平均价格(VWAP)是基于一个月的滴答数据,而VWAP的时间范围很小。对数据进行重新采样会导致安静的市场周期被一行又一行的零值填充,从而将数据集扩展到遗忘。在
下面提供了一个小样本数据集(带代码)。在
from StringIO import StringIO
from datetime import date, datetime, time
from pytz import timezone
import pandas as pd
s = """TIMESTAMP_DT,PRICE,QTY
2015-09-08 10:24:16.671862751+10:00,97.295,2
2015-09-08 10:25:33.952672310+10:00,97.3,4
2015-09-08 10:38:30.840283893+10:00,97.3,3
2015-09-08 11:00:47.536800660+10:00,97.305,1
2015-09-08 11:00:47.536896273+10:00,97.305,2
"""
SYD = timezone('Australia/Sydney')
df1 = pd.read_csv(StringIO(s), sep=',', index_col = 0)
df1.index = pd.to_datetime(df1.index)
df1.index = df1.index.tz_localize('UTC').tz_convert(SYD)
PRICE QTY
TIMESTAMP_DT
2015-09-08 10:24:16.671862751+10:00 97.295 2
2015-09-08 10:25:33.952672310+10:00 97.300 4
2015-09-08 10:38:30.840283893+10:00 97.300 3
2015-09-08 11:00:47.536800660+10:00 97.305 1
2015-09-08 11:00:47.536896273+10:00 97.305 2
我可以很容易地得到一个成交量的价格通过做类似的事情
^{pr2}$如果我能够指定一个滚动时间窗口(可能是一个时间增量),那么使用pandas滚动方法将如下所示:
df1['VWAP'] =
rolling_sum(df1['Volume_Scaled_Price'], window = timedelta(minute = 5), min_periods = 1)
/ rolling_sum(df1['QTY'], window = timedelta(minute = 5), min_periods = 1)
有人知道一种有效的方法来实现滚动窗口,指定时间段吗?在
不确定你是否最终找到了解决方案,但我最近问了一个类似的问题。有人指出pandas0.19.0现在支持Time-aware Rolling。在
我认为您应该能够在5分钟的窗口上执行滚动计算,具体如下:
另外-下面是当前支持的偏移别名列表。在
http://pandas.pydata.org/pandas-docs/stable/timeseries.html#offset-aliases
相关问题 更多 >
编程相关推荐