逻辑或在 pandas 掩码列表中

alw*_*ous 7 python numpy pandas

我有一个通过对数据框应用不同搜索条件获得的布尔掩码列表。以下是包含 4 个掩码的示例列表:

mask_list = [mask1, mask2, mask3, mask4]
Run Code Online (Sandbox Code Playgroud)

我想找到列表中所有掩码的逻辑或。换句话说,

or_mask = mask_list[0] | mask_list[1] | mask_list[2] | mask_list[3]
Run Code Online (Sandbox Code Playgroud)

对于包含任意数量掩码的列表,是否有一种紧凑的方法来实现此目的?我知道我可以编写一个 for 循环,如下所示,但是有没有更短、更Pythonic 的方法来做到这一点?

for i in range(len(mask_list)):
    if i == 0:
        temp_mask_or = mask_list[i]
    else:
        temp_mask_or = temp_mask_or | mask_list[i]
Run Code Online (Sandbox Code Playgroud)

Pek*_*kka 9

您可以使用减少:

or_(x,y)意味着x|y这会起作用:

from operator import or_
or_mask = reduce(or_,mask_list)
Run Code Online (Sandbox Code Playgroud)

编辑:正如 JoeCondron 所建议的,operator.or_ 您可以使用numpy.logical_or它给出相同的结果但速度更快。

  • 您还可以使用“numpy.logic_or”而不是“or_”,后者看起来快大约 4 - 6 倍。 (6认同)