熊猫:重新采样分类索引数据

时间:2020-11-08 10:06:10

标签: python pandas pandas-groupby pandas-resample

假设一些测量数据(实际上每分钟给出一次)名为logData

import pandas as pd, numpy as np

idxData = pd.to_datetime(['08:00', '08:15', '08:30', '08:45', '09:00'])
logData = pd.DataFrame(np.array([1.0, 2.0, 3.0, 4.0, 5.0]), columns=['val'], index=idxData)
idxRng  = pd.interval_range(idxData[0], idxData[-1], freq='30min')
avgData = logData.groupby( pd.cut(logData.index, idxRng) ).mean()

数据分组为avgData,例如看起来像这样:

                      val
(08:00:00, 08:30:00]  2.5
(08:30:00, 09:00:00]  4.5

此降采样后的avgData现在应该(在执行其他一些计算之后)再次升采样,例如到freq='10min'的频率进行进一步计算。由于avgData.resample('10min')引发以下错误,因此问题是如何重新采样分类数据

TypeError: Only valid with DatetimeIndex, TimedeltaIndex or PeriodIndex, but got an instance of 'CategoricalIndex'

非常感谢!

2 个答案:

答案 0 :(得分:0)

为了使重新采样有效,您的索引需要具有datetime64 [ns]的数据类型。 通过运行下面的代码,检查索引的数据类型。

avgData.index.dtype

答案 1 :(得分:0)

我花了一些时间弄清楚如何有意义地转换分类索引,但是index.categories.mid似乎可以工作,可以通过以下方式对数据进行重新采样

avgData.set_index( pd.DatetimeIndex( avgData.index.categories.mid ), inplace=True)
avgData = avgData.resample('5min').interpolate(method='nearest')

产生预期的结果:

          val
08:15:00  2.5
08:20:00  2.5
08:25:00  2.5
08:30:00  2.5
08:35:00  4.5
08:40:00  4.5
08:45:00  4.5