2 votos

Cálculo de pendientes en Python

Intento calcular la pendiente para la ventana móvil de 5 y 20 periodos y añadirla al marco de datos existente. La longitud total del conjunto de datos sería, digamos, de 30 días. Tengo dos columnas "Volume" y "Vpt", he intentado sklearn (linregress) y numpy (polyfit) pero en ambos casos, estoy recibiendo un mensaje de error "IndexError: iloc cannot enlarge its target object". Por favor, vea el código de abajo y ayudar a resolver este problema.

for j in range(len(temp)):
   x = np.array(temp['Volume'][j:j+5])
   y = np.array(temp['vpt'][j:j+5])
   slope = np.polyfit(x,y,1)
   # slope, intercept, r_value, p_value, std_err = linregress(x, y)
   temp['slope_5'].iloc[j+5] = slope[0]
   a = np.array(temp['Volume'][j:j+20])
   b = np.array(temp['vpt'][j:j+20])
   slope_1 = np.polyfit(a,b,1)
   # slope, intercept, r_value, p_value, std_err = linregress(a, b)
   temp['slope_20'].iloc[j+20] = slope_1[0]

2voto

Tsuyoshi Ito Puntos 1589

En realidad, he encontrado una respuesta a mi pregunta anterior.

def np_slope(data):
    return np.polyfit(data.index.values,data.values,1)[0]

temp.index = temp['Volume']
temp['slope_5'] = temp['vpt'].rolling(5,min_periods=5).apply(np_slope,raw=False)        
temp['slope_20']= temp['vpt'].rolling(20,min_periods=20).apply(np_slope,raw=False)

Finanhelp.com

FinanHelp es una comunidad para personas con conocimientos de economía y finanzas, o quiere aprender. Puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X