按行和每行中的元素加快Python循环的运行速度

按行和每行中的元素加快Python循环的运行速度,python,loops,vectorization,rows,Python,Loops,Vectorization,Rows,我有一个数据框,其中包含日期,行和列分别表示某一特定日期每只股票的$investment(“ndate”)。此外,我还有一个系列(“portT”),包含每个日期所有股票的总投资总额(系列大小:len(ndate)*1)。以下代码通过将每行数据的每个元素除以当天的总和来计算每个股票/每个日期的权重: (l,w)=port1.shape for i in range(0,l): port1.iloc[i]=np.divide(ndate.iloc[i],portT.iloc[

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

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

代码运行得很慢,你能告诉我如何修改和加速它吗?我尝试通过矢量化来实现这一点,但没有成功。

因为这只是对相同形状的两个数据帧的简单除法(或者您可以将其表述为相同的形式),您可以使用简单的
/
-运算符,pandas将以元素方式执行它(如果形状不匹配,则可能使用复制,因此请确保):

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

编辑: 我对你的问题的概述弄错了;下次可能会包含一个最小的自包含代码示例。尽管如此,
/
-运算符也可用于数据帧和系列的组合:

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]])

您好,请注意,我从系列中获取总和(df2),而不是从相同大小的数据帧中获取总和。
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]])