gpt4 book ai didi

python - 使用函数过滤 Pandas 数据框

转载 作者:太空宇宙 更新时间:2023-11-04 00:25:04 26 4
gpt4 key购买 nike

假设我有一个 pandas 数据框 df,列 A、B、C、D、E、F、G、H,我想过滤数据框使用函数 functn 接收“行”并根据行是否满足特定条件返回 true 或 false(假设函数使用除 H 之外的每一列) .有没有一种方法可以在没有又长又丑的 lambda 的情况下有效地过滤这个数据框?到目前为止,我的解决方案如下所示:

df = df[df.apply(functn, axis=1)]

但这种方法似乎非常慢,即使对于具有 15k 行的帧也是如此。是否有一种干净有效的方法来使用用户定义的 python 函数而不是 lambda 或查询来过滤 pandas 数据框?

注意:我之前使用纯 python 2d 数组实现了它,它比使用 pandas 快得多。我是在滥用某个功能还是不知道有什么方法可以加快此过滤过程?

编辑:

数据结构大致如下:

#       A       B       C     D     E     F      G        H      
[
[string1, string2, int1, int2, int3, int4, float1, float2],
...
]

这个函数做了这样的事情:

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 实现基本上采用数据帧,如果不是 Pandas 形式,它基本上是一个二维数组,循环遍历每个元素,将函数应用于它(除了参数是列表而不是“行”) ,如果它返回 true,则将该新元素添加到另一个列表。

最佳答案

IIUC,您不需要函数。让我们按如下方式使用 bool 索引:

cond1 = df['G'] <= 0.01
cond2 = (((df.D - df.C + 1)*1.0)/global_map[df.A]) >= 0.66
cond3 = (((df.F - df.E + 1)*1.0)/global_map[df.B]) >= 0.66

mask = cond1 & (cond2 | cond3)

df[mask]

关于python - 使用函数过滤 Pandas 数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47805789/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com