加速每个行中的行和元素运行的Python循环

时间:2018-05-15 07:46:03

标签: python loops vectorization rows

我有一个数据框,其中包含日期作为行和列,作为特定日期每个股票的$ investment(“ndate”)。另外,我有一个系列(“portT”),其中包含每个日期所有股票的总投资总和(系列大小:len(ndate)* 1)。以下是通过将每行ndate的每个元素除以当天的总和来计算每个股票/每个日期的权重的代码:

(l,w)=port1.shape  
for i in range(0,l):      
    port1.iloc[i]=np.divide(ndate.iloc[i],portT.iloc[i])

代码运行速度非常慢,请您告诉我如何修改和加快代码?我试图通过矢量化来做到这一点,但没有成功。

1 个答案:

答案 0 :(得分:0)

因为这只是两个相同形状的数据帧的简单划分(或者你可以这样形成它)你可以使用简单的/ - 运算符,pandas将逐个元素地执行它(可能是复制的形状不匹配,所以请确保):

import pandas as pd
df1 = pd.DataFrame([[1,2], [3,4]])
df2 = pd.DataFrame([[2,2], [3,3]])
df_new = df1 / df2
#>>> pd.DataFrame([[0.5, 1.],[1., 1.3]])

这很可能在内部执行您在示例中指定的相同操作,但是,内部分配和检查是绕过的,这应该会给您一些速度

编辑: 我错了你的问题大纲;下次可能包含一个最小的自包含代码示例。 / - 运算符仍然适用于Dataframes和Series:

import pandas as pd
df = pd.DataFrame([[1,2], [3,4]])
s = pd.Series([1,2])
new_df = df / s
#>>> pd.DataFrame([[1., 3.],[1., 2]])