示例数据:
Val1 Val2
1. 10
1. 12
3. 42
3. 14
5. 12
所以过滤逻辑是这样的:
- 如果
Val1
小于 3,则删除它,除非Val2
小于 11
因此,应用此条件后,我的数据集将如下所示:
Val1 Val2
1. 10
3. 42
3. 14
5. 12
有没有简洁的方法可以做到这一点?
删除Val1
小于 3 的行 除非Val2
小于 11,等于保留Val1
>= 3 或Val2
<11 的行:
>>> df[(df.Val1 >= 3) | (df.Val2 < 11)]
Val1 Val2
0 1 10
2 3 42
3 3 14
4 5 12
尝试比较两个布尔值:
In [24]: cond1 = df.Val1 < 3
In [25]: cond2 = df.Val2 < 11
df.loc[~(cond1 > cond2)]
Out[29]:
Val1 Val2
0 1.0 10
2 3.0 42
3 3.0 14
4 5.0 12
它比较两个布尔序列;如果 cond1 为 True,cond2 为 False,则应删除该行,因为它不符合要求。