如何在 pandas 中创建“非”过滤器

问题描述 投票:0回答:4

我有一个大型数据框,已导入 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,那么我们希望从数据框中取消这些值的资格。 谢谢

python pandas
4个回答
45
投票

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

应用德摩根定律

“非(A 和 B)”与“(非 A)或(非 B)”相同

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

2
投票

您可以使用:将所有内容括在括号中,并在外面使用〜(波形符)。代替不。

df[~((df['A'] >0) & (df['B']>0))]

答案:

    A       B
0   12345   0
1   0       0
2   3005    0
3   0       1
4   0       2

1
投票

无需

map
实施。你可以颠倒论点,比如......

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

或者使用

boolean indexing
而不使用
ix
:

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

0
投票

尝试

df2 = df[df["A"].map(lambda x: x <= 0) | (df["B"] <= 0)]
© www.soinside.com 2019 - 2024. All rights reserved.