使用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'
-=
和
to30)一起应用或使用
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