Как выполнить линейную интерполяцию в pandas с учетом значений X? - PullRequest
0 голосов
/ 30 января 2020

У меня есть фрейм данных с двумя столбцами: X и Y. Некоторые значения в Y отсутствуют (np.nan).

Я хотел бы заполнить NaNs с помощью линейной интерполяции. Более подробно, я хочу упорядочить фрейм данных по X, и любые пропущенные значения Y должны представлять собой «линейную смесь» двух соседних значений Y (одно соответствует меньшему X, а другое X).

Если значение X, соответствующее отсутствующему Y, ближе к одному из двух X с доступным Y, то заполненное значение Y должно быть близко к соответствующему Y. Как сделать это эффективно и элегантно в pandas?

Обратите внимание, что pandas.Series.interpolate не делает то, что мне нужно, насколько я понимаю.

1 Ответ

1 голос
/ 30 января 2020

Настройка фрейма данных:

x = [0,1,3,4,7,9,11,122,123,128]
y = [2,8,12,np.NaN, 22, 31, 34, np.NaN, 43, 48]

df = pd.DataFrame({"x":x, "y":y})
print(df)

     x     y
0    0   2.0
1    1   8.0
2    3  12.0
3    4   NaN
4    7  22.0
5    9  31.0
6   11  34.0
7  122   NaN
8  123  43.0
9  128  48.0

Установите для столбца 'x' индекс:

df = df.set_index('x')

Затем установите метод в interplote на 'index'.

df.y = df.y.interpolate(method='index')

В результате:

df

        y
x   
0      2.000000
1      8.000000
3     12.000000
4     14.500000
7     22.000000
9     31.000000
11    34.000000
122   42.919643
123   43.000000
128   48.000000
...