繁体   English   中英

Pandas中的自定义时间序列重新采样

[英]Custom time series resampling in Pandas

我有1m频率的OHLC数据df:

                        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打开=第一个(列打开)
  • High = max(列高)从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没有成功。

我使用了以下'how':

conversion = {'Open': 'first', 'High': 'max', 'Low': 'min', 'Close': 'last'}
import pandas as pd
df = pd.read_table('data', sep='\s{2,}')
# Make sure the index is a DatetimeIndex
df.index = pd.DatetimeIndex(df.index)

# discard rows whose time falls between 16:00 and 18:00
df = df.between_time('18:00', '16:00', include_start=True, include_end=True)

proxy = df.index + pd.DateOffset(hours=6)
result = df.groupby(proxy.date).agg(
    {'Open': 'first', 'High': 'max', 'Low': 'min', 'Close': 'last'})
result = result.reindex(columns=['Open','High','Low','Close'])
print(result)

产量

               Open    High      Low    Close
2005-09-07  1230.25  1235.5  1229.25  1234.25

上面的代码创建了一个代理日期,该日期是通过向索引中的每个日期时间添加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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM