Estou tentando reduzir a amostragem de uma série temporal no Pandas de 8 segundos para 10 segundos. Para os propósitos deste exemplo, gerei dados falsos que aumentam linearmente com o número de segundos, ao longo de um minuto. Importante, para este exemplo, os intervalos de tempo das duas séries temporais não são múltiplos um do outro.
Ao usar .resample().interpolate() no Pandas, ele parece incapaz de interpolar para os primeiros pontos, para os quais há dados suficientes. Como posso contornar isso? Aqui está o exemplo:
import numpy as np
import pandas as pd
import datetime
a = datetime.datetime(2025, 12, 2, 17, 39, 6)
interval8df = pd.DataFrame(np.linspace(60, 124, 9), columns=['Hi'], index=pd.date_range(a, periods=9, freq='8s'))
interval8df['Hi']
2025-12-02 17:39:06 60.0
2025-12-02 17:39:14 68.0
2025-12-02 17:39:22 76.0
2025-12-02 17:39:30 84.0
2025-12-02 17:39:38 92.0
2025-12-02 17:39:46 100.0
2025-12-02 17:39:54 108.0
2025-12-02 17:40:02 116.0
2025-12-02 17:40:10 124.0
Freq: 8s, Name: Hi, dtype: float64
Ao usar a interpolação de reamostragem, este é o resultado:
interval8df.resample('10s').interpolate(method='time')['Hi']
2025-12-02 17:39:00 NaN
2025-12-02 17:39:10 NaN
2025-12-02 17:39:20 NaN
2025-12-02 17:39:30 84.0
2025-12-02 17:39:40 94.0
2025-12-02 17:39:50 104.0
2025-12-02 17:40:00 114.0
2025-12-02 17:40:10 124.0
Freq: 10s, Name: Hi, dtype: float64
Embora eu possa entender o primeiro 17:39:00 indo para NaN, tanto 17:39:10 quanto 17:39:20 são cercados por pontos na série temporal original (6 e 14 segundos, depois 14 e 20 segundos, respectivamente). Por que isso está ocorrendo?
Tentei usar mean, mas não produziu NaNs.
interval8df.resample('10s').mean()['Hi']
2025-12-02 17:39:00 60.0
2025-12-02 17:39:10 68.0
2025-12-02 17:39:20 76.0
2025-12-02 17:39:30 88.0
2025-12-02 17:39:40 100.0
2025-12-02 17:39:50 108.0
2025-12-02 17:40:00 116.0
2025-12-02 17:40:10 124.0
Freq: 10s, Name: Hi, dtype: float64
Além disso, alterar o método de interpolação não parece ter melhorado a solução.
A solução alternativa que tenho usado é aumentar a amostragem de 8 segundos para 1 segundo usando interpolação, depois diminuir a amostragem de 1 segundo para 10 segundos usando a média, o que é obviamente desajeitado. Gostaria de poder fazer isso diretamente em uma etapa.