Как интерполировать или экстраполировать на даты в прошлом? (Python) - PullRequest
0 голосов
/ 26 мая 2020

У меня есть набор данных в реальном времени из одного источника, который работает с 2003 по 2018 год. У меня есть другой источник, в котором есть данные только за 1990 год. Я хочу объединить данные и создать временной ряд с 1990 по 2018 год.

Используя pandas Я объединил ряды, которые выглядят так, как показано ниже:

dates                           
1990-01-01   8.8  11.4
1990-02-01   7.8  12.8
1990-03-01   5.6  18.6
.....
2003-01-01   10.3 11.6
2003-02-01   9.6  15.0
2003-03-01   7.5  21.7

При повторной индексации я создал новый кадр с периодичностью в месяц и нансами для пропущенных значений, а затем провел интерполяцию отсутствующих данных.

start = dtm.datetime(1990,1,1)
end = dtm.datetime(2018,12,1)

frames = [df1,df2]
combined = pd.concat(frames)
rsam = pd.date_range(start,end, freq = 'MS')
combined = combined.reindex(rsam,axis = 0)
combined['NH'] = combined['NH'].interpolate(method = 'spline', order = 3)
combined['SH'] = combined['SH'].interpolate(method = 'spline', order = 3)

Если пробовали разные методы и добавляли limit_area, limit_direction et c.

Однако интерполяция дает мне действительно странный результат.

Вывод графика после интерполяции

Это, на мой взгляд, связано с тем, что при интерполяции используются данные 1990 г. для прямой интерполяции. Однако данные за 2003-2008 гг. Являются пояснительными, а данные за 1990 г. используются только для интерполяции (вместо экстраполяции). Как я могу создать временной ряд, который использует 2003-2008 годы для интерполяции данных до 1990 года, а не наоборот?

Я пытался отменить все данные, но переиндексация не работает, если даты не указаны в обычном порядке. Можно ли сделать с pandas?

...