如何同时将多个掩码应用于一个数据帧?

时间:2019-10-02 10:12:54

标签: python pandas

我为df设置了三个掩码,我想过滤掉这些值。

例如,一些随机蒙版:

mask1 = df['column1'].isnull()
mask2 = df['column2'] > 5
mask3 = df['column3'].str.contains('hello')

现在如何结合使用这些掩码以滤除这些值? 这是正确的方法吗?同时使用~|吗?

masked_df = df[~mask1 | ~mask2 | ~mask3]

我的数据框中有太多行,以至于我不能100%确定手动检查是否正确。

1 个答案:

答案 0 :(得分:4)

您的解决方案很好,但也可以按位AND使用并反转链接条件:

masked_df = df[~(mask1 & mask2 & mask3)]

如果列表中包含掩码,则以上解决方案将用np.logical_and.reduce重写:

masks = [mask1, mask2, mask3]

m = df[~np.logical_and.reduce(masks)]
print (m)
   A  column1  column2 column3
2  c      4.0        9   hello
3  d      5.0        4   hello
4  e      5.0        2   hello
5  f      4.0        3   hello