我对组合功能有疑问。
我的目的是同时应用两个功能。基本上,我想通过查找数据集最低部分的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)))]
答案 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))
因此您不需要过滤中的括号