使用Python在数据集中搜索并基于某些条件返回值

使用Python在数据集中搜索并基于某些条件返回值,python,pandas,Python,Pandas,我需要查看我的数据集,找到满足特定条件的所有值。我尝试了pandas.where(cond),它只接受一个条件 例如考虑以下数据集: a b c d 1 2 3 899 4 5 -344 21 7 8 9 10 我需要这个结果:0

我需要查看我的数据集,找到满足特定条件的所有值。我尝试了
pandas.where(cond)
,它只接受一个条件

例如考虑以下数据集:

a    b    c     d

1    2    3     899

4    5    -344  21

7    8      9   10

我需要这个结果:
0布尔数据框
,并与
'inverse conditions'
-
=
to
30)一起应用或使用
df=测向掩模(m)
打印(df)
a、b、c、d
01123.0NAN
1 4 5 NaN 21.0
2  7  8  9.0  10.0

这可以通过二进制表达式(可以是复合表达式)作为选择标准来实现。Pandas重载dunder(双下划线)函数以获取二进制表达式。使用它的一个常见问题是它不是一个逻辑表达式,因此当它是复合表达式时,需要在表达式中使用位运算符
&
|
。这些运算符比相等运算符和比较运算符绑定得更紧(例如,
=
=
),因此需要将比较放在括号内


我相信@jezrael给出的答案会起作用。这只是对s/he所提供内容的解释。

有没有办法通过特定条件来掩盖上述列?我的意思是,对于每一列,检查特定的条件并更新该列,所以..我想帮忙,但现在我要睡觉了。因此,最好的方法是用示例数据、所需输出和一些代码创建新问题,您可以尝试什么。祝你好运
a    b    c      d

1    2    3      Nan

4    5     Nan   21

7    8      9   10
m = (df >= 0) & (df <= 30)
print (m)
      a     b      c      d
0  True  True   True  False
1  True  True  False   True
2  True  True   True   True

df = df[m]
#alternatively
#df = df.where(m)
print (df)
   a  b    c     d
0  1  2  3.0   NaN
1  4  5  NaN  21.0
2  7  8  9.0  10.0
df = pd.DataFrame(np.where(m, df, np.nan), index=df.index, columns=df.columns)
print (df)
     a    b    c     d
0  1.0  2.0  3.0   NaN
1  4.0  5.0  NaN  21.0
2  7.0  8.0  9.0  10.0
m = (df < 0) | (df > 30)
df = df.mask(m)
print (df)

   a  b    c     d
0  1  2  3.0   NaN
1  4  5  NaN  21.0
2  7  8  9.0  10.0