如何在 python 中为 pandas 创建一个“不”过滤器

新手上路,请多包涵

我有一个已导入熊猫的大型数据框,我想通过过滤器将其切碎。这是我的基本示例代码:

 import pandas as pd
import numpy as np
from pandas import Series, DataFrame

df = DataFrame({'A':[12345,0,3005,0,0,16455,16454,10694,3005],'B':[0,0,0,1,2,4,3,5,6]})

df2= df[df["A"].map(lambda x: x > 0) & (df["B"] > 0)]

基本上这显示了半正确的底部 4 个结果。但我需要显示除这些结果之外的所有内容。所以本质上,我正在寻找一种使用此过滤器的方法,但如果可能的话,我会使用“非”版本。因此,如果 A 列大于 0 且 B 列大于 0,那么我们要从数据帧中取消这些值的资格。谢谢

原文由 staten12 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 374
2 个回答

无需对“A”系列进行地图功能调用。

应用 德摩根定律

“不是(A 和 B)”与“(不是 A)或(不是 B)”相同

df2 = df[~(df.A > 0) | ~(df.B > 0)]

原文由 hhbilly 发布,翻译遵循 CC BY-SA 3.0 许可协议

不需要 map 实现。你可以把论点颠倒过来,比如……

 df.ix[(df.A<=0)|(df.B<=0),:]

或者使用 boolean indexing 而不使用 --- ix

 df[(df.A<=0)|(df.B<=0)]

原文由 ssm 发布,翻译遵循 CC BY-SA 3.0 许可协议

推荐问题