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

2024-04-20 09:19:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据框,其中的日期以行和列的形式表示,每只股票在某一天的投资额为美元(“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])

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


Tags: 数据代码元素forlen形式权重股票
1条回答
网友
1楼 · 发布于 2024-04-20 09:19:07

由于这只是对相同形状的两个数据帧的简单除法(或者您可以将其表述为这样的除法),因此您可以使用简单的/-运算符,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]])

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

编辑: 我对您的问题的概述弄错了;下次可能会包含一个最小的自包含代码示例。仍然/-运算符也适用于数据帧和序列的组合:

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

相关问题 更多 >