Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.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 在循环中多次过滤数据帧的最快方法_Python_Pandas_Dataframe_For Loop_Filter - Fatal编程技术网

Python 在循环中多次过滤数据帧的最快方法

Python 在循环中多次过滤数据帧的最快方法,python,pandas,dataframe,for-loop,filter,Python,Pandas,Dataframe,For Loop,Filter,我有一个300万行的数据帧(df1)和一个10万行的数据帧(df2)。对于df2中的每一行,过滤df1的最快方法是什么 以下正是我在循环中需要做的事情: for i in list(range(len(df2))): #For each row x = df1[(df1['column1'].isin([df2['info1'][i]])) \ & (df1['column2'].isin([df2['info2'][i]])) \ &am

我有一个300万行的数据帧(df1)和一个10万行的数据帧(df2)。对于df2中的每一行,过滤df1的最快方法是什么

以下正是我在循环中需要做的事情:

for i in list(range(len(df2))): #For each row
    x = df1[(df1['column1'].isin([df2['info1'][i]])) \
          & (df1['column2'].isin([df2['info2'][i]])) \
          & (df1['column3'].isin([df2['info3'][i]]))]
    # ..... More code using x variable every time ......
这段代码的速度不够快,无法运行

请注意,我使用了.isin函数,但在它里面总是只有一项。我发现使用.isin(),
df1['column1'].isin([df2['info1'][I]]
)比使用
df1['column1']==df2['info1'][I]
作为pd导入熊猫更快 将numpy作为np导入 def make_过滤器(x、y、match_dict、uinque=False): 过滤器=无 对于x列中的x_键: 如果x_输入匹配命令: y_键=匹配[x_键] y_col=y[y_键] 如果是uinque: y_col=y_col.unique() col\u filter=x[x\u key].isin(y[y\u key]) 如果过滤器为无: 过滤器=col_过滤器 其他: 过滤器=过滤器和列过滤器 回流过滤器 def main(): n_行=100 x=np.random.randint(4,size=(n_行,2)) x=pd.DataFrame(x,列=[“col1”,“col2”]) y=np.random.randint(2,4,size=(n_行,2)) y=pd.DataFrame(y,列=[“info1”,“info2”]) match_dict={“col1”:“info1”,“col2”:“info2”} z=生成过滤器(x,y,匹配dict,uinque=真) 打印(x[z]) main()
我可能错过了一些东西,但是
df1[“column1”]有什么问题。isin(df2[“info1”])