Я хотел бы интерполировать отсутствующие значения в группах в кадре данных, используя значение предыдущей и следующей строк.
Вот df (в группе больше записей, но для этого примера я оставил 3 на группу):
import numpy as np
import pandas as pd
df = pd.DataFrame({'Group': ['a','a','a','b','b','b','c','c','c'],'Yval': [1,np.nan,5,2,np.nan,8,5,np.nan,10],'Xval': [0,3,2,4,5,8,3,1,9],'PTC': [0,1,0,0,1,0,0,1,0]})
df:
Group Yval Xval PTC
0 a 1.0 0 0
1 a NaN 3 1
2 a 5.0 2 0
3 b 2.0 4 0
4 b NaN 5 1
5 b 8.0 8 0
6 c 5.0 3 0
7 c NaN 1 1
8 c 10.0 9 0
Для PTC (точка для расчета) мне нужна интерполяция Yval с использованием Xval, Yval из строк -1, +1. т.е. для группы я хотел бы: df.iloc[1,1]=np.interp(3, [0,2], [1,5])
Вот что я пытался сделать, используя метод loc и shift и функцию interp, найденную в этом post< /а>:
df.loc[(df['PTC'] == 1), ['Yval']]= \
np.interp(df['Xval'], (df['Xval'].shift(+1),df['Xval'].shift(-1)),(df['Yval'].shift(+1),df['Yval'].shift(-1)))
Ошибка, которую я получаю:
ValueError: object too deep for desired array