在平时的金融数据处理中,模型构建中,经常会用到pandas的groupby。之前的一篇文章中也讲述过groupby的作用:
https://blog.youkuaiyun.com/qtlyx/article/details/80515077
但是,大家都知道,python有一个东西叫做GIL,说白了就是python并没有多线程这种东西。那么,现在如果我们要进行groupby操作怎么办呢?我们可以使用多线程,使用一个叫做joblib的模块,来实现groupby的并行运算,然后在组合,有那么一点map-reduce的感觉。
我们的场景是这样的:我们希望计算一系列基金收益率的beta。那么按照普通的方法,就是对每一个基金进行groupby,然后每次groupby的时候回归一下,然后计算出beta。我们来看一下计算beta的函数:
def beta_cal_mult(one_fund_df):
ll = list()
for ind in range(len(one_fund_df)):
one_fund_df_sub = one_fund_df.iloc[ind:ind + 20]
ll.append(cross_regression(one_fund_df_sub, ['NAV_ADJ_RETURN1'], ['bench_mark_return']).params['bench_mark_return'])
one_fund_df['beta_mult']