Python 如何使用pandas.groupby.nth()加速循环?
我想加速一个循环,该循环在每次迭代时在数据帧上使用Python 如何使用pandas.groupby.nth()加速循环?,python,pandas,numpy,dataframe,pandas-groupby,Python,Pandas,Numpy,Dataframe,Pandas Groupby,我想加速一个循环,该循环在每次迭代时在数据帧上使用groupby.nth()。 下面是对我的代码的快速解释: 假设我要执行蒙特卡罗模拟: ->假设我有一个数据帧df1,其权重为10*20。(10项资产的权重随时间而变化,即20年,每列总和=1) ->和df2(见图),另一个是200.000*20。(第一列是Nan,因为它是返回的数据帧) 200.000是我的10项资产的数据,一行放置(每个20.000行) 我的代码: -通过模拟次数循环(0
groupby.nth()
。
下面是对我的代码的快速解释:
假设我要执行蒙特卡罗模拟:
->假设我有一个数据帧df1,其权重为10*20。(10项资产的权重随时间而变化,即20年,每列总和=1)
->和df2(见图),另一个是200.000*20。(第一列是Nan,因为它是返回的数据帧)
200.000是我的10项资产的数据,一行放置(每个20.000行)
我的代码:
-通过模拟次数循环(0Returns = 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),代码速度非常慢,因为它需要在循环中使用第n(i)个值,将df1和dftemp的值相乘,然后在每一步求和
我试着看Cython和Numba来加速代码,但没有成功。Numpy能加速这个循环吗?但在这种情况下,如何替换熊猫的第n(i)个功能
谢谢你的帮助
为什么不使用
groupby('Asset').head()
或groupby('Asset').nlargest()
?@QuangHoang,因为如果我将groupby('Asset').head(i)放在一个循环中,我有一个递增的数组,因为head(3)将为每个资产提供三行。n(i)为每个资产提供一行,但第三行除外。你认为我们可以在numpy中使它更快吗?不,我的意思是你使用head(n)
,忘记循环的。但是如何在每一步替换矩阵值的乘法呢?例如retsum=(TranspGrilleT.values*path.values).sum(axis=0)
为什么不使用groupby('Asset').head()
或groupby('Asset').nlargest()
?@QuangHoang,因为如果我把groupby('Asset').head(i)放在一个循环中,我有一个递增的数组,因为head(3)会为每个资产给我三行。n(i)为每个资产提供一行,但第三行除外。你认为我们可以在numpy中使它更快吗?不,我的意思是你使用head(n)
,忘记循环的。但是如何在每一步替换矩阵值的乘法呢?即retsum=(TranspGrilleT.values*path.values).sum(axis=0)