我正在使用函数segmentMatch
,其中我发送两个数据帧。我在一个数据帧中使用for
循环,在使用循环变量与另一个数据帧合并之前,需要检查一些条件。它给了我完美的答案,但是因为两个数据帧都太大了,所以它太慢了。你知道吗
有什么办法可以提高速度吗。你知道吗
def segmentMatch(self, df, df_program):
df_result = []
for i, rview in df.iterrows():
df_tmp = []
df1 = []
df_tmp = df_program.ix[(df_program.iD == rview['id']) &
(rview['end_time'] >= df_program.START_TIME) &
(rview['start_time'] <= df_program.END_TIME)]
df1 = rview.to_frame().transpose()
tmp = pd.merge(df1, df_tmp,how='left')
df_result.append(tmp)
result = pd.concat(df_result, axis=0)
del(df1, df_tmp, tmp)
return result
请帮帮我。我使用的是visualstudio代码和python3.6
提前谢谢。你知道吗
一般来说,如果可以避免的话,建议不要在数据帧中循环。与任何
merge
或join
相比,循环速度非常慢。你知道吗条件连接在熊猫中不是很好。不过,它们在SQL中非常简单。一个小的lifehack可以是
pip install pandasql
并实际使用SQL。另见here。下面的例子没有经过测试。你知道吗如果您不想使用
pandassql
,我建议您稍后合并并检查条件。当然,这需要更多的内存,这取决于id中的重叠。同样,没有数据的情况下有点棘手,但是有些东西如果它不适合内存,您可以尝试对dask数据帧执行相同的操作。你知道吗
相关问题 更多 >
编程相关推荐