组合函数(AND)

时间:2015-05-29 14:26:11

标签: python pandas ipython-notebook

我对组合功能有疑问。

我的目的是同时应用两个功能。基本上,我想通过查找数据集最低部分的5%分位数和另一端的最高%来剪切极值的数据集。

df = df[df.temperature >= df.temperature.quantile(.05)]

获取高于5%分位数的值

df = df[df.temperature <= df.temperature.quantile(.95)]

获取低于95%分位数的所有值。

我目前的问题是

df = df[df.temperature >= df.temperature.quantile(.05)]
df = df[df.temperature <= df.temperature.quantile(.95)]

有效,但不准确,因为第二个功能建立在前一个剪辑之上。那我怎么能一次切两个?

df = df[df.temperature >= df.temperature.quantile(.05) & <=    df.temperature.quantile(.95)]

不起作用。

感谢您的支持!

解决:

df = df [(df.temperature&gt; = df.temperature.quantile(.05))&amp; (df.temperature&lt; =(df.temperature.quantile(.95)))]

1 个答案:

答案 0 :(得分:2)

由于运算符优先级,您需要围绕条件使用括号:

f = df[(df.temperature >= df.temperature.quantile(.05)) & (df.temperature <= df.temperature.quantile(.95))]

docs显示>=的优先级低于&所以你需要括号,除了你的代码应该引起一个模棱两可的错误。

代码风格明智,将条件作为变量更具可读性,因此我会将其重写为:

low_limit = df.temperature >= df.temperature.quantile(.05)
upper_limit = df.temperature >= df.temperature.quantile(.95)

然后你的过滤成为:

df[(low_limit) & (upper_limit)]

您可以选择更改

low_limit = df.temperature >= df.temperature.quantile(.05)

low_limit = (df.temperature >= df.temperature.quantile(.05))

因此您不需要过滤中的括号