2017-07-19 47 views
1

我有一個名爲df的熊貓數據框,其中包含一個名爲_type的列和一個名爲avg_engaged_time的列。我想看看_type0avg_engaged_time是在第5和第95百分位之間的行。這裏是我的嘗試至今:基於_type熊貓:一個系列的真值不明確

首先,我過濾器:

original = result_df[result_df['_type'] == 0.0] 

然後我找到百分位數:

low_original = original['_avg_engaged_time'].quantile(0.05) 
high_original = original['_avg_engaged_time'].quantile(0.95) 

然後我嘗試基於這些百分位數進行過濾:

original[original['_avg_engaged_time'] > low_original and original['_avg_engaged_time'] < high_original] 

不幸的是,我得到這個錯誤:

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all(). 

我只想使用基本布爾索引,以篩選出具有比第5百分位超過95個百分點的_avg_engaged_time小於或大於行...

任何想法如何解決?

謝謝!

回答

4

您應該使用按位運算符&而不是and。您正在布爾值列表之間進行邏輯操作,而不是單個布爾值。

所以

original[(original['_avg_engaged_time'] > low_original) & (original['_avg_engaged_time'] < high_original)] 

應該工作。

+0

嗯,我這樣做,並得到'TypeError:無法比較dtyped [float64]數組與標量類型[布爾]' – bclayman

+0

可能只是一個錯誤的括號從我身邊。再試一次 – 5agado