我想使用以下方法在数据集中删除行:
totes = df3.loc[(df3['Reporting Date'] != '18/08/2017') & (df3['Business Line'] != 'Bondy')]
但是这不是我所期望的;我知道使用后我希望ot删除的行数是496。
totes = df3.loc[(df3['Reporting Date'] == '18/08/2017') & (df3['Business Line'] == 'Bondy')]
当我运行drop函数时,它返回的行要比我的数据集减去496少得多。
有人知道如何解决此问题吗?
答案 0 :(得分:2)
您正确使用&
,但已被滥用。这是一个逻辑问题。注意:
(NOT X) AND (NOT Y) != NOT(X AND Y)
相反,您可以通过~
运算符来计算布尔条件的负数:
totes = df3.loc[~((df3['Reporting Date'] == '18/08/2017') & (df3['Business Line'] == 'Bondy'))]
这些括号和掩码可能会造成混淆,因此您可以更清楚地写出以下内容:
m1 = df3['Reporting Date'].eq('18/08/2017')
m2 = df3['Business Line'].eq('Bondy')
totes = df3.loc[~(m1 & m2)]
或者,请注意:
NOT(X & Y) == NOT(X) | NOT(Y)
因此您可以使用:
m1 = df3['Reporting Date'].ne('18/08/2017')
m2 = df3['Business Line'].ne('Bondy')
totes = df3.loc[m1 | m2]