Python 在循环中多次过滤数据帧的最快方法
我有一个300万行的数据帧(df1)和一个10万行的数据帧(df2)。对于df2中的每一行,过滤df1的最快方法是什么 以下正是我在循环中需要做的事情: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
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”])
?