首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >加速按行和每行中的元素运行的Python循环

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

Stack Overflow用户
提问于 2018-05-15 15:46:03
回答 1查看 57关注 0票数 0

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

代码语言:javascript
复制
(l,w)=port1.shape  
for i in range(0,l):      
    port1.iloc[i]=np.divide(ndate.iloc[i],portT.iloc[i])

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

EN

回答 1

Stack Overflow用户

发布于 2018-05-15 16:04:00

因为这只是两个相同形状的数据帧的简单划分(或者你可以这样定义它),你可以使用简单的/-operator,pandas将以元素的方式执行它(如果形状不匹配,可能会进行复制,所以要确保):

代码语言:javascript
复制
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]])

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

编辑:我对你的问题的描述是错误的;也许下一次可以包含一个最小的自包含代码示例。不过,/-operator也适用于数据帧和系列的组合:

代码语言:javascript
复制
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]])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50344917

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档