如何向量化(使用pandas / numpy)而不是使用嵌套的for循环

我希望有效地使用pandas(或numpy)而不是for带有if语句的嵌套循环来解决特定问题。这是一个玩具版本:


假设我有以下两个DataFrame


import pandas as pd

import numpy as np


dict1 = {'vals': [100,200], 'in': [0,1], 'out' :[1,3]}

df1 = pd.DataFrame(data=dict1)


dict2 = {'vals': [500,800,300,200], 'in': [0.1,0.5,2,4], 'out' :[0.5,2,4,5]}

df2 = pd.DataFrame(data=dict2)

现在,我希望遍历每个数据帧的每一行,并在满足特定条件的情况下乘以val。这段代码适用于我想要的


ans = []


for i in range(len(df1)):

    for j in range(len(df2)):

        if (df1['in'][i] <= df2['out'][j] and df1['out'][i] >= df2['in'][j]):

            ans.append(df1['vals'][i]*df2['vals'][j])


np.sum(ans)

但是,显然这是非常低效的,实际上,我的DataFrames可以具有数百万个条目,因此无法使用。我也不会做的我们pandas还是numpy有效的载体实现。有谁知道如何有效地向量化此嵌套循环?


我觉得这段代码类似于矩阵乘法,因此可以利用outer吗?这if是我很难进入的条件,因为if逻辑需要将中的每个条目df1与中的所有条目进行比较df2。


宝慕林4294392
浏览 342回答 3
3回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python