У меня есть функция Hodrick-Prescott (HP), определенная в Python, следующим образом:
import statsmodels.api as sm
def func_HP(close, params):
cycle,trend = sm.tsa.filters.hpfilter(close,params)
return trend
Если я применил эту функцию к столбцу, присутствующему в файле данных, вот так:
df['Trend'] = func_HP(df['Close'],18000)
он отлично работает, и я получаю значение тренда для всего столбца "статический".
Я хочу применить функцию HP к текущему окну столбца df ['Close']. Длина окна составляет 240. Таким образом, фильтр HP будет применен к катящимся 240 записям. Я использовал этот код:
x = df.rolling(window=240, min_periods=240, on='Close').apply(func_HP(df['Close'],18000))
но я получаю ошибку:
TypeError: объект 'Series' не может быть вызван
Я предполагаю, что это связано с тем, что после применения катящегося окна столбец df['Close']
становится массивом: это правильно?
И что я могу сделать, чтобы "преобразовать" результат скользящего выбора в столбец?
Да, похоже, что функция hp_filter возвращает массив. Поэтому вам нужно добавить что-то вроде:
def func_HP(close, params):
cycle,trend = sm.tsa.filters.hpfilter(close,params)
df_trend = pd.dataframe(trend)
return df_trend