Я хочу написать функцию крена, чтобы получить наклон заданного числа точек, предшествующих данной строке.
Фрейм данных имеет несколько столбцов, один из которых является переменной времени. Таким образом, в общем, я хочу иметь возможность вычислять наклон движения любого столбца относительно временного столбца
Я сделал это с помощью цикла for, но, как вы можете себе представить, этосовершенно неэффективно.
Я написал функцию наклона, которую я буду применять для прокатки.Он использует sklearn.linear_model
from sklearn.linear_model import LinearRegression
def slope(x,y):
x=x.values.reshape(-1,1)
y=y.values.reshape(-1,1)
regressor=LinearRegression()
regressor.fit(x,y)
return regressor.coef_[0][0]
Так, например, у меня есть следующий фрейм данных:
i time var_A var_B
0 0.1 0.327 1.080
1 0.2 0.618 1.275
2 0.3 0.841 1.478
3 0.4 0.972 1.562
4 0.5 0.995 1.443
5 0.6 0.909 1.119
6 0.7 0.723 0.677
7 0.8 0.457 0.264
8 0.9 0.141 0.025
9 1 -0.191 0.045
10 1.1 -0.501 0.319
Таким образом, целью было бы написать функцию для получения наклона дляскользящее окно 4, дающее следующий результат.
df.rolling(window=4).apply(slope(df.time,df.var_A))
i time var_A var_B slope_A
0 0.1 0.327 1.080 NaN
1 0.2 0.618 1.275 NaN
2 0.3 0.841 1.478 NaN
3 0.4 0.972 1.562 2.157
4 0.5 0.995 1.443 1.262
5 0.6 0.909 1.119 0.227
6 0.7 0.723 0.677 -0.833
7 0.8 0.457 0.264 -1.801
8 0.9 0.141 0.025 -2.570
9 1 -0.191 0.045 -3.057
10 1.1 -0.501 0.319 -3.207
Надеюсь, это имеет смысл!