2015-05-29 52 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