如何使用pandas滚动申请

时间:2016-10-05 03:44:14

标签: python pandas

任务是使用自定义函数(panel_garch1)和Pandas'滚动应用',它使用另一个名为'arch'的包,用于预测波动率,首先让我们得到一些数据:

import numpy as np
from arch.univariate import GARCH, EGARCH, ConstantMean, Normal
import pandas as pd
from pandas.io.data import DataReader

aapl = DataReader('AAPL',  'yahoo', datetime(2006,1,1), datetime(2016,3,10))
returns = pd.DataFrame(np.diff(np.log(aapl['Adj Close'].values)))
returns.index = aapl.index.values[1:aapl.index.values.shape[0]]
returns.columns = ['AAPL Returns']

返回数据看起来像这样

2006-01-04  0.002939
2006-01-05  -0.007901
2006-01-06  0.025486
2006-01-09  -0.003282
2006-01-10  0.061328
2006-01-11  0.036906
2006-01-12  0.004638
2006-01-13  0.015305
2006-01-17  -0.010335
2006-01-18  -0.026557
2006-01-19  -0.042723

一个简单的函数'compute_mean'非常适用

def compute_mean(ret):
    return np.mean(ret)
returns.rolling(center=False, window=12).apply(compute_mean)

现在我想在下面使用这个功能

def panel_garch1(df_ret):
    ret = df_ret
    am = ConstantMean(ret)
    am.volatility = EGARCH(1, 0, 1)
    am.distribution = Normal()
    cond_vol = am.fit(update_freq=0, disp='off').conditional_volatility
    return cond_vol

如果我只使用它,它可以正常工作,返回可以是数据帧或numpy数组

panel_garch1(returns)

然后,如果我尝试将其应用于滚动窗口,则无效

returns.rolling(center=False, window=12).apply(panel_garch1)

pd.rolling_apply(returns, 12, lambda x: panel_garch1(x))

熊猫会抱怨

TypeError: only length-1 arrays can be converted to Python scalars

这里有什么问题?我已经在stackoverflow上读过一些内容,比如here,但这些问题的答案并不适用于这种情况。非常感谢你!

0 个答案:

没有答案