gpt4 book ai didi

python - 如何在 Pandas/Numpy 中使用 dateOffset 对日内时间序列数据进行重采样?

转载 作者:行者123 更新时间:2023-11-28 17:39:54 25 4
gpt4 key购买 nike

我正在处理 future 数据,当天从 00:00:00 开始。考虑到日期偏移,我需要将 1 分钟数据重采样为 1 小时数据。让我们看一个例子:

df1 - 1 分钟数据

                        Open     High      Low    Close
2005-09-06 17:27:00 1234.75 1234.75 1234.75 1234.75
2005-09-06 17:28:00 1234.75 1234.75 1234.75 1234.75
2005-09-06 17:29:00 1234.75 1234.75 1234.75 1234.75
2005-09-06 17:30:00 1234.75 1234.75 1234.50 1234.50
2005-09-06 18:01:00 1234.50 1234.50 1234.25 1234.50
2005-09-06 18:02:00 1234.50 1234.50 1234.50 1234.50
2005-09-06 18:03:00 1234.50 1234.50 1234.50 1234.50
2005-09-06 18:04:00 1234.50 1234.50 1234.50 1234.50
2005-09-06 18:05:00 1234.50 1234.50 1234.25 1234.25

这是常规重采样会发生的情况:

conversion = {'Open': 'first', 'High': 'max', 'Low': 'min', 'Close': 'last'}

In [77]: normal_resample = df1.resample(rule='60Min', how=conversion)
In [78]: normal_resample
Out[79]:
Open High Low Close
2005-09-06 17:00:00 1234.75 1234.75 1234.50 1234.50
2005-09-06 18:00:00 1234.50 1234.50 1234.25 1234.25

这是考虑偏移量的所需输出:

conversion = {'Open': 'first', 'High': 'max', 'Low': 'min', 'Close': 'last'}

In [77]: offset_resample = df1.resample(rule='60Min', how=conversion) + offset:18:00
In [78]: offset_resample
Out[79]:
Open High Low Close
2005-09-06 17:00:00 1234.75 1234.75 1234.50 1234.50
2005-09-07 18:00:00 1234.50 1234.50 1234.25 1234.25

请注意我想要的是如何指定新的一天从“18:00:00”开始,而不是午夜。

我做了什么:我有一个公式,其中包括偏移量、对每日数据的重采样,但我不知道如何调整它以适应日内重采样。

def resample_day(df):
df.index = pd.DatetimeIndex(df.index)
df = df.between_time('18:00', '16:00', include_start=True, include_end=True)
proxy = df.index + pd.DateOffset(hours=6) # This is the piece that does the trick
result = df.groupby(proxy.date).agg(
{'Open': 'first', 'High': 'max', 'Low': 'min', 'Close': 'last'})
result = result.reindex(columns=['Open', 'High', 'Low', 'Close'])
return result

另外,什么是suggested here ,至少对我来说是行不通的。

感谢您的输入。

最佳答案

您可以添加一天(如果时间是下午 5 点之后):

In [11]: df1.index.time > datetime.time(17)
Out[11]: array([False, True], dtype=bool)

In [12]: df1.index + np.where((df1.index.time > datetime.time(17)), pd.offsets.Day(1).nanos, 0)
Out[12]:
<class 'pandas.tseries.index.DatetimeIndex'>
[2005-09-06 17:00:00, 2005-09-07 18:00:00]
Length: 2, Freq: 60T, Timezone: None

关于python - 如何在 Pandas/Numpy 中使用 dateOffset 对日内时间序列数据进行重采样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25901338/

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