具有多个条件的Pandas Dataframe中的布尔索引

时间:2015-07-15 17:34:55

标签: python pandas

我试图根据两列中的值从我的3列数据框中删除特定行。我一直在尝试使用布尔索引,但没有看到我期望的结果。

示例:我想删除单个行,其中'SchoolID'等于1234,'State'列等于New York。这些对于数据框中的此行是唯一的。

我尝试了以下操作,但删除了比预期更多的行:

DF[(DF['SchoolID'] != 1234) & (DF['State'] != 'New York')]

当我尝试以下操作时,产生了反向,我想要的单行:

DF[(DF['SchoolID'] == 1234) & (DF['State'] == 'New York')]

任何人都可以解释这种差异吗?有没有关于布尔索引的遗漏?

2 个答案:

答案 0 :(得分:2)

DF[(DF['SchoolID'] != 1234) & (DF['State'] != 'New York')]

不是

的反转
DF[(DF['SchoolID'] == 1234) & (DF['State'] == 'New York')]

当反转条件时,你必须改变=运算符(你做了),还有&运营商:&成为|反之亦然。

最后,你想要的条件是:

DF[(DF['SchoolID'] != 1234) | (DF['State'] != 'New York')]

即对于给定的行

  • 如果SchoolID!= 1234 =>保持
  • if State!= New-York =>保持
  • 如果SchoolID = 1234:进入下一个条件
    • 如果State = New York =>保持
    • if State!= New York =>保持

答案 1 :(得分:1)

这是De Morgan's Law的情况。如果你想要

的倒数
a and b

然后你想要

(not a) or (not b)

所以对于你的情况,只需抓住

DF[(DF['SchoolID'] != 1234) | (DF['State'] != 'New York')]