def TM(df):
alpha=0
beta2=0
a=pd.DataFrame()
temp=pd.DataFrame(df)
temp['mret2']=temp['mret'].values**2
x=temp[['mret','mret2']]
y=temp['ret']
X=sm.add_constant(x)
result=sm.OLS(y,X).fit()
a['params']=result.params
a['tvalues']=result.tvalues
if a['params'][0]>0 and a['tvalues'][0].abs()>2:
alpha=1
if a['params'][2]>0 and a['tvalues'][2].abs()>2:
beta2=1
return (alpha,beta2)
sig1['alpha','beta2'] = rets.groupby('ticker')[['ret','mret']].rolling(100).apply(beta2).values
我本来想用for语句做rolling regression,但效率太低而且样本量太大,跑程序太慢了。现在想改成groupby.rolling.apply 方法,先对ticker分组再组内的运算rolling regression,但是貌似该对象不是dataframe,所以无法套用自定义函数进行组间运算。请问有没有好的方法解决