2017-03-08 158 views
1

鉴于下列1小时数据帧上采样:当我尝试使用这种方法的数据上采样到10分钟的时间内如何在没有填充间隙中的日期时间

    column1 
datetime     
2016-08-09 19:00:00  1 
2016-08-09 20:00:00  2 
2016-08-10 06:00:00  3 
2016-08-10 07:00:00  4 

data10min = data1hour.column1.resample("10Min").pad() 

我得到以下结果。

    column1 
datetime     
2016-08-09 19:00:00  1 
2016-08-09 19:10:00  1 
2016-08-09 19:20:00  1 
2016-08-09 19:30:00  1 
2016-08-09 19:40:00  1 
2016-08-09 19:50:00  1 
2016-08-09 20:00:00  2 
2016-08-09 20:10:00  2 
2016-08-09 20:20:00  2 
2016-08-09 20:30:00  2 
2016-08-09 20:40:00  2 
2016-08-09 20:50:00  2 
2016-08-09 21:00:00  2 
.... 
2016-08-10 04:40:00  2 
2016-08-10 04:50:00  2 
2016-08-10 05:00:00  2 
2016-08-10 05:10:00  2 
2016-08-10 05:20:00  2 
2016-08-10 05:30:00  2 
2016-08-10 05:40:00  2 
2016-08-10 05:50:00  2 
2016-08-10 06:00:00  3 
2016-08-10 06:10:00  3 
2016-08-10 06:20:00  3 
2016-08-10 06:30:00  3 
2016-08-10 06:40:00  3 
2016-08-10 06:50:00  3 
2016-08-10 07:00:00  4 

问题是它填补了2016-08-09 20:00:00和2016-08-10 06:00:00之间的日期时间差距。

我正在寻找以下结果,但无法找到实现此目的的有效方法。在没有填补日期时间的空白的情况下,必须有一个简单的上采样方法。

    column1 
datetime     
2016-08-09 19:00:00  1 
2016-08-09 19:10:00  1 
2016-08-09 19:20:00  1 
2016-08-09 19:30:00  1 
2016-08-09 19:40:00  1 
2016-08-09 19:50:00  1 
2016-08-09 20:00:00  2 
2016-08-09 20:10:00  2 
2016-08-09 20:20:00  2 
2016-08-09 20:30:00  2 
2016-08-09 20:40:00  2 
2016-08-09 20:50:00  2 
2016-08-10 06:00:00  3 
2016-08-10 06:10:00  3 
2016-08-10 06:20:00  3 
2016-08-10 06:30:00  3 
2016-08-10 06:40:00  3 
2016-08-10 06:50:00  3 
2016-08-10 07:00:00  4 

还有一件事情,上采样应该在任何时间表上有差距。例如从1D带缺口到1H带缺口或从5min带隙到1min带缺口等。

回答

2

您需要对缺口有很好的定义。假设在你的例子中,间隔是一个恒定的时间,任何更长的时间将是一个差距。

鉴于上述假设,首先重新定位至小时间隔,然后重新采样至10Min即可完成工作。

idx = pd.DatetimeIndex(start=df.index[0], end=df.index[-1], freq='1H') 
df.reindex(idx).resample('10min').pad().dropna() 

        column1 
2016-08-09 19:00:00  1.0 
2016-08-09 19:10:00  1.0 
2016-08-09 19:20:00  1.0 
2016-08-09 19:30:00  1.0 
2016-08-09 19:40:00  1.0 
2016-08-09 19:50:00  1.0 
2016-08-09 20:00:00  2.0 
2016-08-09 20:10:00  2.0 
2016-08-09 20:20:00  2.0 
2016-08-09 20:30:00  2.0 
2016-08-09 20:40:00  2.0 
2016-08-09 20:50:00  2.0 
2016-08-10 06:00:00  3.0 
2016-08-10 06:10:00  3.0 
2016-08-10 06:20:00  3.0 
2016-08-10 06:30:00  3.0 
2016-08-10 06:40:00  3.0 
2016-08-10 06:50:00  3.0 
2016-08-10 07:00:00  4.0 

在上面的例子中,我假设你的原始数据框是排序的,所以取第一个和最后一个元素将覆盖整个范围。你也可以采取最小,最大或一些自定义的开始和结束日期。

不知何故,reindexing将数据类型更改为浮动,这有点奇怪。

+0

谢谢@RutgerKassies的答案:) – RaduS