如何在python中为Pandas创建一个“not”过滤器

fnatzsnv  于 2022-12-16  发布在  Python
关注(0)|答案(4)|浏览(136)

我有一个导入到Pandas中的大 Dataframe ,我想通过一个过滤器把它分解掉。下面是我的基本示例代码:

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,则我们希望从 Dataframe 中取消这些值。谢谢

zzoitvuj

zzoitvuj1#

不需要在系列“A”上调用Map函数。
应用De Morgan's Law

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

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

7cjasjjr2#

不需要map实现,您可以像这样反转参数...

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

或者使用不带ixboolean indexing

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

yhuiod9q3#

试试看

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

字符串

f8rj6qna

f8rj6qna4#

您可以用途:把所有东西都放在括号里,外面用~(波浪号)代替没有东西。

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

答:

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

相关问题