Python: изменение масштаба временных рядов в pandas с помощью нецелочисленного коэффициента масштабирования

Я понятия не имею, возможно ли это в Pandas. Я думал, что df.resample может сделать эту работу, но нет. Вот моя цель:

У меня есть временной ряд в DataFrame, df, который выглядит так:

            return
12:30:00 -0.000202
12:30:01 -0.000257
12:30:02 -0.000230
12:30:03 -0.000229
12:30:04 -0.000253
...
12:59:49  0.001491
12:59:50  0.001523
12:59:51  0.001503
12:59:52  0.001484
12:59:53  0.001513
12:59:54  0.001523
12:59:55  0.001527
12:59:56  0.001545
12:59:57  0.001532
12:59:58  0.001535
12:59:59  0.001566
13:00:00  0.001605

Это сюжет:

введите здесь описание изображения

Теперь вы можете видеть, что время идет от 12:30:00 to 13:00:00. Я хочу изменить масштаб или растянуть этот временной ряд, чтобы получить наблюдения от 12:30:00 to 14:15:00. Следовательно, мне нужно иметь еще 3,5 записи в моем исходном временном ряду... так что в 3,5 раза больше повторяющихся записей для каждого наблюдения в моем временном ряду. Если бы это было всего 3 раза, я бы преобразовал свои данные в массив и использовал np.reshape(), а затем переназначил индекс времени, но в данном конкретном случае это не сработает. Какие-либо предложения?


person Plug4    schedule 08.10.2015    source источник
comment
Вы хотите произвести повторную выборку с интерполяцией для нецелочисленных моментов времени. Вам понадобится библиотека обработки сигналов или статистической интерполяции. Вам нужно будет решить/поэкспериментировать, какую функцию интерполяции вы выберете.   -  person smci    schedule 09.10.2015
comment
Я понимаю, что вы имеете в виду под интерполяцией. Проблема в том, что я не знаю, как взять временной ряд, который распространяется на 30 минут и распространяется на один час и 45 минут с nan между числами. Тогда использование интерполяции впоследствии становится легким.   -  person Plug4    schedule 09.10.2015


Ответы (1)


Вы можете преобразовать дату и время в эпоху unix, умножить на свой масштабный коэффициент, а затем преобразовать обратно (вычисление эпохи с использованием Как получить метку времени unix из numpy.datetime64)

df['epoch'] = df.index.astype(np.int64) // 10 ** 9     
start_epoch = df.epoch.iloc[0]
df['epochdelta']= df['epoch'] - start_epoch
df['newindex'] = pd.to_datetime((df.epochdelta * 3.5 + start_epoch),unit='s') 
person maxymoo    schedule 09.10.2015
comment
классное предложение! Спасибо. Я попробую завтра, когда вернусь в офис и вернусь к вам. - person Plug4; 09.10.2015
comment
Намного быстрее вычислить эпоху как df['epoch'] = df.index.astype(np.int64)// 10 ** 9 - person Miro; 17.04.2017
comment
спасибо @Miro да, это намного лучше, я отредактировал свой ответ! - person maxymoo; 18.04.2017