假设我有一个pandas dataframe df
,其中有列A, B, C, D, E, F, G, H
,我想使用函数functn
过滤数据框,该函数接受一个“row”,并根据行是否满足某些条件返回true或false(假设该函数使用除H
之外的所有列)。有没有一种方法可以在没有长而难看的lambda的情况下有效地过滤这个数据帧?到目前为止,我的解决方案如下:
df = df[df.apply(functn, axis=1)]
但这种方法似乎很慢,即使对于15k线的帧也是如此。有没有一种干净有效的方法可以使用用户定义的python函数而不是lambda或查询来过滤pandas数据帧?在
注意:我以前是用普通python2d数组实现的,它比使用pandas要快得多。我是误用了某个功能,还是不知道有什么方法可以让这个过滤过程更快?在
编辑:
数据的结构大致如下:
^{pr2}$函数的作用如下:
def filter(row):
var1 = row.G <= 0.01
partial_a = (((row.D - row.C + 1)*1.0)/global_map[row.A])
partial_b = (((row.F - row.E + 1)*1.0)/global_map[row.B])
partial = partial_a >= 0.66 or partial_b >= 0.66
return var1 and partial
非pandas实现基本上采用dataframe,如果不是pandas形式,则基本上是一个2d数组,并循环遍历每个元素,将函数应用于它(除了参数是一个列表而不是“row”),如果返回true,则将新元素添加到另一个列表中。在
IIUC,你不需要函数。让我们使用布尔索引,如下所示:
相关问题 更多 >
编程相关推荐