熊猫:系列的真实价值是模棱两可的

时间:2017-07-19 14:47:17

标签: python pandas

我有一个名为df的Pandas DataFrame,其中包含一个名为_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().

我只想使用基本的布尔索引来过滤掉_avg_engaged_time小于第5百分位数或大于第95百分位数的行......

任何想法如何解决?

谢谢!

1 个答案:

答案 0 :(得分:4)

您应该使用按位运算符&而不是and。您正在布尔值列表之间进行逻辑运算,而不是单个布尔值。

所以

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

应该有用。