使用函数过滤pandas数据帧

2024-09-29 23:20:28 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个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,则将新元素添加到另一个列表中。在


Tags: 数据方法lambda函数truemapdataframepandas

热门问题