Pandas多列条件筛选问题:如何仅移除两列同时等于指定值的行
移除Pandas DataFrame中多列同时满足条件的行
你遇到的问题很典型——连续两次过滤的逻辑和你实际需求不符啦!
先看你的原始数据:
Col1 Val1 Val2 Val3 a v1 v1 z1 b v1 v3 x1 c v2 v2 x2
你之前写的代码:
df = df[df['Val1'] != 'v1'] df = df[df['Val2'] != 'v1']
这其实是在筛选**Val1不等于'v1' 并且 Val2不等于'v1'**的行,所以行b(Val1是v1)和行a都会被过滤掉,最后只剩行c,这和你要的结果不符。
你的真实需求是只移除Val1和Val2同时等于'v1'的行,也就是保留所有不满足「Val1='v1'且Val2='v1'」的行,这里可以用两种写法实现:
方法1:对复合条件取反
用~符号取反,结合&表示逻辑与(注意括号不能少,不然会运算优先级出错):
df = df[~((df['Val1'] == 'v1') & (df['Val2'] == 'v1'))]
方法2:利用德摩根定律转换条件
根据逻辑运算规则,「不是(A且B)」等价于「非A或非B」,所以也可以这么写:
df = df[(df['Val1'] != 'v1') | (df['Val2'] != 'v1')]
两种方法运行后,得到的结果都是你想要的:
Col1 Val1 Val2 Val3 b v1 v3 x1 c v2 v2 x2
内容的提问来源于stack exchange,提问作者Zanam
相关产品推荐
相关产品推荐

