У меня есть сгруппированные временные ряды из данных измерений, которые выглядят следующим образом.
time value1 value2 value3
run_id<br>
19 00:00:00 14.45 1000.0 5.800000
19 00:00:00.010000 14.45 1000.0 5.591578
19 00:00:00.020000 14.45 1000.0 5.878844
19 00:00:00.030000 14.45 1000.0 5.974964
19 00:00:00.040000 14.45 1000.0 5.643659
... ... ... ... ...
20 00:00:00.647290 17.46 1500.0 5.695907
Теперь я хотел бы увеличить частоту дискретизации с 0,01 с до 0,001 с использованием следующего кода .
for name, group in data.groupby('run_id'):
temp = group.reset_index().set_index('time').resample('0.001S').interpolate(method='spline', order=2)
Это приведет к следующему исключению.
numpy.core._exceptions.UFuncTypeError: Cannot cast ufunc 'greater' input 1 from dtype('float64') to dtype('<m8[ns]') with casting rule 'same_kind'
Выберите частоту для понижающей дискретизации, подобную этой.
temp = group.reset_index().set_index('time').resample('0.02S').interpolate(method='spline', order=2)
Кажется, работает. Повышающая дискретизация работает, если я изменяю метод интерполяции на линейный.
temp = group.reset_index().set_index('time').resample('0.02S').interpolate(method='linear')
Что я здесь не так делаю?
Я также попробовал подход, чтобы применить повторная сэмплирование непосредственно к объекту groupby, как это.
data.reset_index().set_index('time').groupby('run_id').resample('0.001S').interpolate(method='linear')
Имеет ли это смысл или мне нужен подход apply () здесь?