Интерполировать между двумя соседними строками Dataframe - PullRequest
0 голосов
/ 06 августа 2020

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

Вот 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

Для PT C (точка для вычисления) Мне нужна интерполяция Yval с использованием Xval, Yval из -1, +1 строк. То есть для группы A я хотел бы: df.iloc[1,1]=np.interp(3, [0,2], [1,5])

Вот что я пытался сделать, используя lo c и метод сдвига и функцию interp, найденные в этом сообщении :

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

1 Ответ

0 голосов
/ 06 августа 2020
df['Xval-1'] = df['Xval'].shift(-1)
df['Xval+1'] = df['Xval'].shift(+1)
df['Yval-1'] = df['Yval'].shift(-1)
df['Yval+1'] = df['Yval'].shift(+1)

df["PTC_interpol"] = df.apply(lambda x: np.interp(x['Xval'], [x['Xval-1'], x['Xval+1']], [x['Yval-1'], x['Yval+1']]), axis=1)

df['PTC'] = np.where(df['PTC'].isnull(), df["PTC_interpol"], df['PTC'])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...