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

SCo*_*ool 6 python pandas

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

例如,一些随机掩码:

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

现在我如何组合这些掩码来过滤这些值?这是正确的方法吗?同时使用~|?

masked_df = df[~mask1 | ~mask2 | ~mask3]
Run Code Online (Sandbox Code Playgroud)

我的数据框中有很多行,我无法 100% 确定手动检查是否正确。

jez*_*ael 12

Your solution is nice, but also is posible use bitwise AND and invert chained conditions:

masked_df = df[~(mask1 & mask2 & mask3)]
Run Code Online (Sandbox Code Playgroud)

If masks are in list, solution above is rewritten with 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
Run Code Online (Sandbox Code Playgroud)