Я хочу интерполировать список значений (серии панд), используя scipy.interpolate.interp1d, устанавливая постоянное значение, когда входом является NAN.
Причина в том, что мне нужно умножитьдругой ряд для вывода интерполяции, и я хотел бы умножить на 1, это вход NAN
Прямо сейчас я сделал
import pandas as pd
import numpy as np
from scipy.interpolate import interp1d
X = [0,180,360]
Y = [1,10,1]
df = pd.DataFrame({'a':[1,2,3,4,5], 'b':[0,180, np.nan, 270, 999]})
interp= interp1d(X, Y, kind='linear', bounds_error= False)
K = interp(df['b'])
K[[np.isnan(K)]] = 1
df['a'] = df['a'] * K
In [15]: df.a
Out[15]:
0 1.0
1 20.0
2 3
3 22.0
4 5.0
Однако, поскольку df довольно большой, яискал что-то более прямое, что не требовало бы создания переменной K и проверки с помощью np.isnan вектора.Кроме того, это вызывает также раздражающие предупреждения во время interp1d.
Для точек вне интерполирующих границ я могу сделать
interp= interp1d(X, Y, kind='linear', bounds_error= False, fill_value = 1)
, что позволило бы мне сделать
df['a'] = df['a'] * interp(df['b'])
, но, к сожалениюэто не обрабатывает «nan» в df ['b'].
Есть ли лучший способ достичь этого результата?