Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python/pandas-希望删除嵌套循环以提高运行时间_Python_Loops_Pandas_Indexing_Vectorization - Fatal编程技术网

python/pandas-希望删除嵌套循环以提高运行时间

python/pandas-希望删除嵌套循环以提高运行时间,python,loops,pandas,indexing,vectorization,Python,Loops,Pandas,Indexing,Vectorization,鉴于以下情况: import pandas as pd from pandas import * from numpy import * df = pd.DataFrame(columns=['A', 'B', 'C']) df['A'] = [1,1,1,2,2,2,3,3,3,4,4,4,5,5,5] df['B'] = ['a','b','c','a','b','c','a','b','c','a','b','c','a','b','c'] list_a = list(df['A'].

鉴于以下情况:

import pandas as pd
from pandas import *
from numpy import *

df = pd.DataFrame(columns=['A', 'B', 'C'])
df['A'] = [1,1,1,2,2,2,3,3,3,4,4,4,5,5,5]
df['B'] = ['a','b','c','a','b','c','a','b','c','a','b','c','a','b','c']

list_a = list(df['A'].unique())
list_b = list(df['B'].unique())
我想删除以下循环以加快下一步

for i in list_a:
    for j in list_b:
        df.ix[(df['A']==i) & (df['B']==j), 'C'] = i*j
在数万行中,这是令人望而却步的慢。谢谢你们的洞察力

请注意-i*j是无关紧要的-我从查找表中提取=的另一面,这会使示例变得复杂

编辑:我相信这是一个基于列表a和列表b中的项目的索引问题,这样我就可以在我前面提到的ref表中搜索并写入过滤后的df['C']。再次感谢。

您可以:

df['C'] = df['B'] * df['A']
这将对
df['A']
df['B']

中的匹配对应用
*
的逐元素操作,您只需执行以下操作:

df['C'] = df['B'] * df['A']

这将对
df['A']
df['B']

中的匹配对应用
*
的逐元素操作
df['C']=df['B']*df['A']
是否有效?它可以让你得到与你目前得到的答案相同的答案,而且速度要快得多——对不起,我不清楚。这个练习的重点是,我使用i和j在我提到的查找表中搜索。。。所以我认为这确实是一个索引问题。描述你的“查找表”会有很大帮助。这是另一个数据帧吗?您是否将
i
j
插入到SQL查询中?等等。可能有一种方法可以矢量化查找并显著加快查找速度。当然,exp1orer-这是一个包含a、B和C列的数据帧-我需要a和B来查找C。但是,这似乎不是瓶颈。即使当我将df.ix[(df['A']==I)和(df['B']==j),'C']设置为1时,在我的数据集中循环也要花费相当长的时间。我的观点是,根据
=
符号右侧实际发生的情况,您可以完全避免列出a和b,直接对
df['a']
df['b']
进行操作,这会更快。
df['C']=df['b']*df['a']
有效吗?它可以让你得到与你目前得到的答案相同的答案,而且速度要快得多——对不起,我不清楚。这个练习的重点是,我使用i和j在我提到的查找表中搜索。。。所以我认为这确实是一个索引问题。描述你的“查找表”会有很大帮助。这是另一个数据帧吗?您是否将
i
j
插入到SQL查询中?等等。可能有一种方法可以矢量化查找并显著加快查找速度。当然,exp1orer-这是一个包含a、B和C列的数据帧-我需要a和B来查找C。但是,这似乎不是瓶颈。即使当我将df.ix[(df['A']==I)和(df['B']==j),'C']设置为1时,在我的数据集中循环也要花费相当长的时间。我的观点是,根据
=
符号右侧实际发生的情况,你可以完全避免列出a和b,直接操作
df['a']
df['b']
,这会更快。嗨,sedavidw-在我看到你的答案之前,我写信给上面的约翰切斯“练习的要点是,我使用i和j在我提到的查找表中进行搜索。。。所以我认为这真的是一个索引问题。“对不起,我的问题不清楚。嗨,sedavidw-在我看到你的答案之前,我在上面写信给johnchase”练习的要点是,我使用i和j在我提到的查找表中搜索。。。所以我认为这真的是一个索引问题。