我猜想许多处理时间序列数据的人都已经遇到过这个问题,而且pandas似乎还没有提供一个直接的解决方案(暂时没有!):
假设:
1. 你有一个按日期(天)索引的每日收盘价时间序列数据。 2. 今天是6月19日,最后一个收盘数据值是6月18日。 3. 你想将每日数据重新采样成OHLC条形图,并以某个给定的频率(比如M或2M)结束于6月18日。
因此,对于M频率,最后一个条形图将是5月19日至6月18日,上一个条形图将是4月19日至5月18日,依此类推...
假设:
1. 你有一个按日期(天)索引的每日收盘价时间序列数据。 2. 今天是6月19日,最后一个收盘数据值是6月18日。 3. 你想将每日数据重新采样成OHLC条形图,并以某个给定的频率(比如M或2M)结束于6月18日。
因此,对于M频率,最后一个条形图将是5月19日至6月18日,上一个条形图将是4月19日至5月18日,依此类推...
ts.resample('M', how='ohlc')
将进行重新采样,但'M'是“end_of_month”期间,因此结果将为2014-05提供一个完整的月份和2014-06的两周周期,因此您的最后一个柱形图将不是“月度柱形图”。那不是我们想要的!
使用2M
频率,鉴于我的样本时间序列,我的测试给出了标记为2014-07-31的最后一个柱状图(上一个标记为2014-05-31),这非常具有误导性,因为JUL上没有数据....所谓的最后2个月条再次仅涵盖最近的2个星期。
正确的DatetimeIndex可以轻松创建:
pandas.date_range(end='2014-06-18', freq='2M', periods=300) + datetime.timedelta(days=18)
进行相同的操作。pandas.date_range(end='2014-06-18', freq='2M', periods=300) + pandas.tseries.offsets.DateOffset(days=18)
但是我的测试显示,虽然这种方法更加“熊猫风格”,但速度慢了2倍!
无论如何,我们都不能将正确的DatetimeIndex应用于ts.resample()。
似乎pandas开发团队(Pandas中的日期范围)已经意识到了这个问题,但在此期间,您如何解决它以获得以时间序列中最后一天为锚点的滚动频率的OHLC?