循环遍历数据框并根据多个条件返回过滤后的值数组的最有效方法

问题描述

我有一个数据集,其中包含各种元素的事件数据,这些元素的位置数据包含在各个时间点。总数据集非常大,涵盖了许多此类事件。

对于每个时间点的每个元素,我想找到最接近的其他元素。首先,我将返回特定时间段内所有其他元素的位置数据数组,并将其包含在原始数据帧的同一行中(以便稍后执行进一步计算)。

我曾两次尝试对此进行编码,我已将其包括在下面。两者都在如此大的数据集上花费太长时间。任何可以提高效率的方法都将不胜感激。

import pandas as pd
import numpy as np

def func1(db,val,frame):
  return db.loc[(db['val'].isin([val])) & (db['frameId'].isin([frame])) & ['displayName','x','y']] 
  .reset_index(drop=True).values.tolist()

d = pd.DataFrame({'displayName': ['Bob','Jane','Alice','Bob','Alice'],'x': [90,88,86,94,91,92],'y': [24,13,18,20,15,16],'val': [201801,201801,201801],'frameId': [1,1,2,2]})

res = d.apply(lambda row: func1(d,row['val'],row['frameId']),axis=1)

方法 2:

def func2(db,frame):
   return [l[[0,2]] for l in db if l[3] == val if l[4] == frame]

res = d.apply(lambda row: func2(np.array(d),axis=1)  

因此结果 (res) 将是一个如下所示的数组:

[[['Bob',90,24],['Jane',13],['Alice',18]],[['Bob',20],15],92,16]],16]]]

然而,在大型数据集上,这两种方法的生成都非常耗时,因此欢迎任何降低时间复杂度的方法。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)