如何解决循环遍历数据框并根据多个条件返回过滤后的值数组的最有效方法
我有一个数据集,其中包含各种元素的事件数据,这些元素的位置数据包含在各个时间点。总数据集非常大,涵盖了许多此类事件。
对于每个时间点的每个元素,我想找到最接近的其他元素。首先,我将返回特定时间段内所有其他元素的位置数据数组,并将其包含在原始数据帧的同一行中(以便稍后执行进一步计算)。
我曾两次尝试对此进行编码,我已将其包括在下面。两者都在如此大的数据集上花费太长时间。任何可以提高效率的方法都将不胜感激。
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]]]
然而,在大型数据集上,这两种方法的生成都非常耗时,因此欢迎任何降低时间复杂度的方法。
解决方法
如果 3D-Array
的第一个维度的顺序不重要,那么请使用(如果重要,那么您将不得不创建一个按 displayName
或 {{1 }} 并取 index
。按它排序然后删除。让我知道。:
cumcount
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。