Python: Как интерполировать пропущенные значения и построить интерполированную кривую, чтобы сравнить исходную кривую? - PullRequest
0 голосов
/ 26 марта 2020
data = {'tenor_yrs': [.1, .2, .3, .5, 1, 3, 5, 10, 15, 20, 25, 30,40,50], 'rates': [NaN, NaN, NaN, NaN, 2.01, 3, 1.99, 2.05, 3.19, 1.99, 3.16, 2.54, 3.5, 2.79]}

df = pd.DataFrame(data)

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

1 Ответ

2 голосов
/ 26 марта 2020

Вы можете установить tenor_years в качестве индекса, reindex и interpolate, чтобы заполнить пропущенные значения линейной интерполяцией:

(df.set_index('tenor_yrs')
   .reindex(range(int(df.tenor_yrs.max())))
   .interpolate()
   .reset_index())

   tenor_yrs  rates
0          0    NaN
1          1  2.010
2          2  2.505
3          3  3.000
4          4  2.495
5          5  1.990
6          6  1.990
7          7  1.990
8          8  1.990
...

Обновление -

Чтобы включить десятичные знаки в качестве шагов, используйте:

start = int(df.tenor_yrs.min())
end = int(df.tenor_yrs.max())
step = df.loc[df.tenor_yrs>0, 'tenor_yrs'].min()

import numpy as np

(df.set_index('tenor_yrs')
   .reindex(np.arange(start, end, step))
   .interpolate()
   .reset_index())
...