Добавление записей времени в ряды данных Pandas на основе интерполяции существующих значений

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

Year          Price
1940-12-31    33.85
1941-12-31    33.85
1942-12-31    33.85
1943-12-31    33.85
1944-12-31    33.85
1945-12-31    34.71
1946-12-31    34.71
1947-12-31    34.71
1948-12-31    34.71
1949-12-31    31.69
1950-12-31    34.72

Я новичок в сериях данных pandas, но я считаю, что даты являются индексом, потому что, когда я печатаю таблицу, в ней говорится, что есть только 1 столбец.

Я хочу изменить его на ежемесячный, а затем заполнить интерполированные данные за недостающие месяцы на основе линейной прогрессии от одной точки к другой. Так, например, вот образец за 1949 год, который включает недостающие месяцы и интерполяцию:

Date        Price
1948-12-31  34.71
1949-01-31  34.46
1949-02-28  34.21
1949-03-31  33.96
1949-04-30  33.70
1949-05-31  33.45
1949-06-30  33.20
1949-07-31  32.95
1949-08-31  32.70
1949-09-30  32.45
1949-10-31  32.19
1949-11-30  31.94
1949-12-31  31.69

Формула для этих интерполированных значений 1949 года: ([Цена на конец 1949 года] - [Цена на конец 1948 года]) / 12 + Цена за предыдущий месяц.

Я новичок в Pandas и python, поэтому, пожалуйста, извините меня, если вопрос был задан в другом месте.


person Doubledown    schedule 10.10.2015    source источник


Ответы (1)


Следующий код выполнит эту работу:

df['Price'].resample('M').interpolate()

замените df именем вашего DataFrame. resample ('M') изменить частоту серии на ежемесячную. (http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.resample.html)

interpolate () по умолчанию использует линейную интерполяцию, что вы и хотели, но у нее есть много других доступных опций. (http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.interpolate.html)

Это будет работать, если у вас есть DataFrame, который правильно проиндексирован с помощью DatetimeIndex (это должно быть так, если я хорошо понял ваше описание). Вы можете проверить, так ли это на самом деле,

df.index

Если индекс установлен правильно, вы увидите что-то вроде этого на выходе:

DatetimeIndex(['1940-12-31', '1941-12-31', '1942-12-31', '1943-12-31',
           '1944-12-31', '1945-12-31', '1946-12-31', '1947-12-31',
           '1948-12-31', '1949-12-31', '1950-12-31'],
          dtype='datetime64[ns]', freq='A-DEC', tz=None)
person Sina    schedule 11.10.2015