如何使用pandas.groupby.nth()加快循环速度?

时间:2020-04-05 00:54:37

标签: python pandas numpy dataframe pandas-groupby

我想加快循环,该循环在每次迭代时在数据帧上使用groupby.nth()。 这是我的代码的简要说明: 想象一下我想执行蒙特卡洛模拟:

->假设我有一个权重为10 * 20的数据帧df1。 (随着时间的推移(即20年,每10列资产的权重加权等于1列)。

->还有df2(参见图片),另一个是200.000 *20。(第一列是Nan,因为它是返回值的数据帧)

200.000是我连续放置的10个资产的数据(每个20.000行)。

我的代码: -遍历仿真次数(0

-按资产按df2分组

-创建一个dftemp = df2.groupby('asset')。nth(i)并通过乘以df1 * dftemp并在轴= 0上求和来计算return(i)

Returns = np.zeros((nbsimulations,nbyears))
Capital = np.zeros((nbsimulations,nbyears))

    gb = datafilereturns.groupby('Asset')
    for i in range(0, nbsimulations):
        path = gb.nth(i)

        retsum = (TranspGrilleT.values * path.values).sum(axis=0)
        Returns[i,:] = retsum[1:]
    Capital[:,0] = Capital[:,0] * (1 + Returns[:,0])

我的问题是,对于大量的模拟(20.000,即最大值,因为每个资产的数据量不超过20.000),该代码的运行速度很慢,因为它需要在模型中使用nth(i)循环,将df1和dftemp的值相乘,并在每一步求和。

我试图查看Cython和Numba来加快代码执行速度,但没有成功。 Numpy可以加快循环速度吗?但是在那种情况下,如何替换熊猫的nth(i)函数呢?

谢谢您的帮助!

dataset, ie df2

0 个答案:

没有答案