我有一个用Python定义的Hodrick-Prescott(HP)函数,如下所示:
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:“系列”对象不可调用
我想那是因为一旦应用滚动窗口,列df['Close']
就会变成数组:对吗?
该怎么做才能将滚动选择的结果“转换”为列?
答案 0 :(得分:0)
是的,看起来hp_filter函数返回一个数组。因此,您需要添加以下内容:
def func_HP(close, params):
cycle,trend = sm.tsa.filters.hpfilter(close,params)
df_trend = pd.dataframe(trend)
return df_trend