根据Pandas python中的两个条件选择数据帧的行

时间:2014-08-31 23:30:16

标签: python pandas

我有一个df,我想运行类似的东西:

subsetdf= df.loc[(df['Item_Desc'].str.contains('X')==True) or \
                 (df['Item_Desc'].str.contains('Y')==True ),:]

选择所有具有Item Desc列的子行为" X"或" Y"。

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

我运行时遇到错误。有什么帮助吗?

2 个答案:

答案 0 :(得分:7)

使用|代替or。所以:

df.loc[(cond1) | (cond2), :]

or运算符想要比较两个布尔值(或两个计算结果为True或False的表达式)。但是Series(或numpy数组)并不简单地计算为True或False,在这种情况下,我们想要逐个元素地比较两个系列。为此,您可以使用|,称为“按位或”。

熊猫遵循这些笨拙的惯例。请参阅pandas文档中的here以获取解释。

答案 1 :(得分:2)

条件应如下

df.loc[(cond1) | (cond2)]

每个条件也必须括在括号中。括号中的优先级高于按位“OR”运算符。如果没有提供括号,它也会给出相同的错误