调整和重新索引漂移时间索引数据框

Adjusting and reindexing a drifting time index dataframe

我有一个数据集,记录之间的平均间隔为 22.xx 秒,而中值间隔为 21 秒。

我尝试使用 DatetimeIndex.floor/ceil/round 函数(频率为 20/21/22 秒),但是这些会导致索引重复,我需要随后将数据帧与另一个数据帧合并,因此,必须避免重复索引。删除重复的索引也会导致大量数据丢失。

我希望数据帧使用等距时间间隔,最好四舍五入为 00/20/40 秒。

下面显示了一些示例数据行。

2018-05-06 18:02:24    1.15e+07
2018-05-06 18:02:45    1.35e+07
2018-05-06 18:03:05    1.08e+07
...
2018-05-06 18:08:30    1.11e+07
2018-05-06 18:08:50    1.20e+07
2018-05-06 18:09:10    1.30e+07
...

处理后应 return 以下内容。

2018-05-06 18:02:20    1.15e+07
2018-05-06 18:02:40    1.35e+07
2018-05-06 18:03:00    1.08e+07
...
2018-05-06 18:08:20    1.11e+07
2018-05-06 18:08:40    1.20e+07
2018-05-06 18:09:00    1.30e+07
...

四舍五入导致上面有重复的索引,而floorceil也会导致重复的索引。

关于如何在不丢失太多数据的情况下调整漂移有什么建议吗?

谢谢。

DatetimeIndex.round 20S 工作了 20 秒:

df.index = df.index.round('20S')
print (df)
                            col
2018-05-06 18:02:20  11500000.0
2018-05-06 18:02:40  13500000.0
2018-05-06 18:03:00  10800000.0
2018-05-06 18:08:40  11100000.0
2018-05-06 18:08:40  12000000.0
2018-05-06 18:09:20  13000000.0

另一个想法是使用 DataFrame.resample - 它创建具有连续值的 DatetimeIndex

df = df.resample('20S').mean() 
print (df)

                            col
2018-05-06 18:02:20  11500000.0
2018-05-06 18:02:40  13500000.0
2018-05-06 18:03:00  10800000.0
2018-05-06 18:03:20         NaN
2018-05-06 18:03:40         NaN
2018-05-06 18:04:00         NaN
2018-05-06 18:04:20         NaN
2018-05-06 18:04:40         NaN
2018-05-06 18:05:00         NaN
2018-05-06 18:05:20         NaN
2018-05-06 18:05:40         NaN
2018-05-06 18:06:00         NaN
2018-05-06 18:06:20         NaN
2018-05-06 18:06:40         NaN
2018-05-06 18:07:00         NaN
2018-05-06 18:07:20         NaN
2018-05-06 18:07:40         NaN
2018-05-06 18:08:00         NaN
2018-05-06 18:08:20  11100000.0
2018-05-06 18:08:40  12000000.0
2018-05-06 18:09:00  13000000.0

然后可以删除这个值:

df = df.resample('20S').mean().dropna(how='all') 
print (df)
                            col
2018-05-06 18:02:20  11500000.0
2018-05-06 18:02:40  13500000.0
2018-05-06 18:03:00  10800000.0
2018-05-06 18:08:20  11100000.0
2018-05-06 18:08:40  12000000.0
2018-05-06 18:09:00  13000000.0