Python 熊猫中的自定义时间序列重采样

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 .

我有一个频率为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
.
.
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秒的速度运行。我会努力让它跑得更快。如果你有任何建议,我将不胜感激。