gpt4 book ai didi

python - 在 Pandas 中按时间划分窗口(分桶)rolling_*

转载 作者:行者123 更新时间:2023-12-01 04:11:09 24 4
gpt4 key购买 nike

在 Pandas 中,据我所知,rolling_* 方法不包含将范围(在本例中为时间范围)指定为窗口/桶的方法。

我在这里看到了类似的问题:Pandas: rolling mean by time interval我知道我可以对数据进行重新采样,但这对于大型数据集来说并不理想,特别是在窗口大小相对较小的情况下。此处的解决方案存在类似问题:pandas rolling computation with window based on values instead of countsCompute EWMA over sparse/irregular TimeSeries in Pandas

想象一下,如果我想根据一个月的价格变动数据(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

我可以通过执行类似的操作轻松获得批量价格

df1['Volume_Scaled_Price'] = df1['PRICE'] * df1['QTY']

使用一些 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)

有人知道实现滚动窗口、指定时间段的有效方法吗?

最佳答案

不确定您最终是否找到了解决方案,但我最近问了类似的问题。有人指出pandas 0.19.0现在支持Time-aware Rolling

我认为您应该能够使用以下内容在 5 分钟窗口上执行滚动计算:

df1['VWAP'] = df1['Volume_Scaled_Price'].rolling('5min').sum() / df1['QTY'].rolling('5min').sum()

此外 - 这里是当前支持的偏移量别名的列表。

http://pandas.pydata.org/pandas-docs/stable/timeseries.html#offset-aliases

关于python - 在 Pandas 中按时间划分窗口(分桶)rolling_*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34939645/

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