Python 熊猫中的自定义时间序列重采样
我有一个频率为1m的带有OHLC数据的测向仪:Python 熊猫中的自定义时间序列重采样,python,python-2.7,pandas,time-series,Python,Python 2.7,Pandas,Time Series,我有一个频率为1m的带有OHLC数据的测向仪: Open High Low Close DateTime 2005-09-06 18:00:00 1230.25 1231.50 1230.25 1230.25 2005-09-06 18:01:00 1230.50 1231.75 1229.25 1230.50 .
Open High Low Close
DateTime
2005-09-06 18:00:00 1230.25 1231.50 1230.25 1230.25
2005-09-06 18:01:00 1230.50 1231.75 1229.25 1230.50
.
.
2005-09-07 15:59:00 1234.50 1235.50 1234.25 1234.50
2005-09-07 16:00:00 1234.25 1234.50 1234.25 1234.25
我需要进行“自定义”重采样,以适合以下情况下的期货交易时间数据:
- 每天从前一天的18:00:00开始(星期一从星期日18:00:00开始)
- 每天在当天的16:00:00结束
- 时间戳应该是关闭的时间,而不是打开的时间
Open High Low Close
DateTime
2005-09-07 16:00:00 1230.25 1235.50 1229.25 1234.25
其中:
- 在2005-09-06 18:00:00时打开=第一个(列打开)
- 高=从2005-09-06 18:00:00到2005-09-07 16:00:00的最大值(列高)
- 低=从2005-09-06 18:00:00到2005-09-07 16:00:00的最小值(列低)
- 关闭=最后一次(列关闭)在2005-09-07 16:00:00
- 更改参数规则和基础,但不起作用
- 玩reindex没有成功
conversion = {'Open': 'first', 'High': 'max', 'Low': 'min', 'Close': 'last'}
屈服
Open High Low Close
2005-09-07 1230.25 1235.5 1229.25 1234.25
上面的代码创建了一个代理日期,通过在索引中的每个datetime中添加6小时来计算代理日期。然后将此代理日期用作
groupby
值
In [112]: proxy = pd.DatetimeIndex(df.index) + pd.DateOffset(hours=6)
要查看代理值如何对应于索引,请执行以下操作:
In [116]: pd.Series(proxy.date, index=df.index)
Out[116]:
DateTime
2005-09-06 18:00:00 2005-09-07
2005-09-06 18:01:00 2005-09-07
2005-09-07 15:59:00 2005-09-07
2005-09-07 16:00:00 2005-09-07
dtype: object
屈服
Open High Low Close
2005-09-07 1230.25 1235.5 1229.25 1234.25
上面的代码创建了一个代理日期,通过在索引中的每个datetime中添加6小时来计算代理日期。然后将此代理日期用作
groupby
值
In [112]: proxy = pd.DatetimeIndex(df.index) + pd.DateOffset(hours=6)
要查看代理值如何对应于索引,请执行以下操作:
In [116]: pd.Series(proxy.date, index=df.index)
Out[116]:
DateTime
2005-09-06 18:00:00 2005-09-07
2005-09-06 18:01:00 2005-09-07
2005-09-07 15:59:00 2005-09-07
2005-09-07 16:00:00 2005-09-07
dtype: object
我们是否可以将每天的结束时间定为当天的18:00,否则,16:00到18:00之间的日期时间该怎么办?@unutbu这是个好问题。您可以在16:01和17:59之间丢弃该数据。谢谢。我们能把每天的结束时间定为当天的18:00吗?否则,16:00到18:00之间的日期时间该怎么办?@unutbu这是个好问题。您可以在16:01和17:59之间丢弃该数据。谢谢。所以我把它放在我真正的df中运行了3行,大约需要3分钟。它工作正常,只是有一天因为某种原因打印不正确。我得检查一下细节。你认为你能告诉我,如果你能把每天都当作当天18:00结束,你会怎么做吗;只需删除开头的行
df=df.between_time(…)
。非常感谢!。这正是我需要的。它以1分钟35秒的速度运行。我会努力让它跑得更快。如果您有任何建议,我将不胜感激。因此,我在我的3行实际df中运行了它,大约需要3分钟。它工作正常,但有一天由于某种原因,它没有给出正确的打印。我得检查一下细节。你认为你能告诉我,如果你能把每天都当作当天18:00结束,你会怎么做吗;只需删除开头的行df=df.between_time(…)
。非常感谢!。这正是我需要的。它以1分钟35秒的速度运行。我会努力让它跑得更快。如果你有任何建议,我将不胜感激。