我试图根据两列中的值从我的3列数据框中删除特定行。我一直在尝试使用布尔索引,但没有看到我期望的结果。
示例:我想删除单个行,其中'SchoolID'等于1234,'State'列等于New York。这些对于数据框中的此行是唯一的。
我尝试了以下操作,但删除了比预期更多的行:
DF[(DF['SchoolID'] != 1234) & (DF['State'] != 'New York')]
当我尝试以下操作时,产生了反向,我想要的单行:
DF[(DF['SchoolID'] == 1234) & (DF['State'] == 'New York')]
任何人都可以解释这种差异吗?有没有关于布尔索引的遗漏?
答案 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')]
即对于给定的行
答案 1 :(得分:1)
这是De Morgan's Law的情况。如果你想要
的倒数a and b
然后你想要
(not a) or (not b)
所以对于你的情况,只需抓住
DF[(DF['SchoolID'] != 1234) | (DF['State'] != 'New York')]