Как интерполировать временные ряды панд, используя разные временные меткиPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как интерполировать временные ряды панд, используя разные временные метки

Сообщение Anonymous »

Я ищу функцию

Код: Выделить всё

pandas_interpolate(df: pd.DataFrame, newTime: pd.DatetimeIndex, method: str = 'linear') -> pd.DataFrame
который будет принимать существующий фрейм данных с индексом DatetimeIndex и возвращать новый фрейм данных с индексом, заданным newTime. Для каждого столбца значения нового кадра данных должны оцениваться путем интерполяции значений исходного кадра данных. По сути, эта функция должна вести себя аналогично numpy.interp. Мне известен метод pandas.DataFrame.interpolate, однако он интерполирует существующие значения NAN и не принимает новый индекс в качестве аргумента.
На данный момент у меня есть 2 идеи
  • Добавить новый индекс и конец кадра данных со всеми значениями, равными NAN, а затем удалить повторяющиеся индексы для точных меток времени, которые уже существуют. , затем используйте метод интерполяции pandas, а затем выбирайте только строки с новым индексом.
  • Преобразуйте фрейм данных в массив numpy. Прокрутите столбцы, используйте интерполяцию numpy, а затем преобразуйте обратно в фрейм данных.
Оба варианта, безусловно, будут работать, но они довольно уродливы. Есть ли способ сделать это?
Изменить: минимальный пример

Код: Выделить всё

df = pd.DataFrame({'value': [1, 2, 3]},
index=pd.DatetimeIndex(['2024-01-01',
'2024-01-15',
'2024-01-30']))

newTime = pd.date_range(start=df.index[0], end=df.index[-1], freq='1D')
что приводит к появлению newTime

Код: Выделить всё

DatetimeIndex(['2024-01-01', '2024-01-02', '2024-01-03', '2024-01-04',
'2024-01-05', '2024-01-06', '2024-01-07', '2024-01-08',
'2024-01-09', '2024-01-10', '2024-01-11', '2024-01-12',
'2024-01-13', '2024-01-14', '2024-01-15', '2024-01-16',
'2024-01-17', '2024-01-18', '2024-01-19', '2024-01-20',
'2024-01-21', '2024-01-22', '2024-01-23', '2024-01-24',
'2024-01-25', '2024-01-26', '2024-01-27', '2024-01-28',
'2024-01-29', '2024-01-30'],
dtype='datetime64[ns]', freq='D')
Тогда ожидаемый результат функции должен быть (я взломал его здесь)

Код: Выделить всё

pd.DataFrame({'value': np.interp(np.arange(1, 31), [1,15,30], [1,2,3])}, index=newTimes)
это

Код: Выделить всё

value
2024-01-01  1.000000
2024-01-02  1.071429
2024-01-03  1.142857
2024-01-04  1.214286
2024-01-05  1.285714
2024-01-06  1.357143
2024-01-07  1.428571
2024-01-08  1.500000
2024-01-09  1.571429
2024-01-10  1.642857
2024-01-11  1.714286
2024-01-12  1.785714
2024-01-13  1.857143
2024-01-14  1.928571
2024-01-15  2.000000
2024-01-16  2.066667
2024-01-17  2.133333
2024-01-18  2.200000
2024-01-19  2.266667
2024-01-20  2.333333
2024-01-21  2.400000
2024-01-22  2.466667
2024-01-23  2.533333
2024-01-24  2.600000
2024-01-25  2.666667
2024-01-26  2.733333
2024-01-27  2.800000
2024-01-28  2.866667
2024-01-29  2.933333
2024-01-30  3.000000
Важное ПРИМЕЧАНИЕ. Исходные значения могут быть смещены относительно новых значений, например, они могут быть заданы с почасовой точностью. Поэтому возможно, что ни одна точка исходного индекса не соответствует новому индексу.

Подробнее здесь: https://stackoverflow.com/questions/791 ... timestamps
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»