我有一个名为df
的Pandas DataFrame,其中包含一个名为_type
的列和一个名为avg_engaged_time
的列。我想查看_type
为0
且avg_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().
我只想使用基本的布尔索引来过滤掉_avg_engaged_time
小于第5百分位数或大于第95百分位数的行......
任何想法如何解决?
谢谢!
答案 0 :(得分:4)
您应该使用按位运算符&
而不是and
。您正在布尔值列表之间进行逻辑运算,而不是单个布尔值。
所以
original[(original['_avg_engaged_time'] > low_original) & (original['_avg_engaged_time'] < high_original)]
应该有用。