【发布时间】:2016-09-26 09:33:15
【问题描述】:
我有一个已导入 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,那么我们希望从数据框中取消这些值的资格。谢谢
【问题讨论】:
-
在此处阅读有关布尔掩码的文档:pandas.pydata.org/pandas-docs/stable/…。您可以将
~用作“非”df2= df[~df["A"].map(lambda x: x > 0) & (df["B"] > 0)] -
这是朝着正确方向迈出的一步,但它只给我留下了 2 条记录而不是 5 条
-
对不起,我贴的sn-p需要应用于整个蒙版,而不是第一个。
df[~(df["A"].map(lambda x: x > 0) & (df["B"] > 0))] -
为什么不能反过来呢?如果 A 列小于 0 或 b 列小于 0
-
@Thomas Tu,谢谢!
标签: python python-2.7 pandas