2015-05-29 50 views
2

我有一个关于组合函数的问题。组合函数(AND)

我的目的是同时应用两个功能。基本上,我想通过在数据集的最低部分查找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> = df.temperature.quantile(0.05))&(df.temperature < =(df.temperature.quantile(0.95)) )]

回答

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)) 

,所以你不需要括号中的过滤

+1

这几乎是正确的,但我可以修复它:DF = DF [(df.temperature> = df.temperature.quantile(0.05)) &(df.temperature <=(df.temperature.quantile(.95)))] – Christopher

+0

对不起,这是一个错字,将更新 – EdChum