You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对pandas布尔型Series列表执行逐元素逻辑与聚合

问题场景

在pandas中持有2个以上布尔型Series时,直接使用&运算符执行search[0] & search[1]可以正确返回布尔型Series,结果示例如下:

search[0] & search[1]
# 输出
0     True
1    False
dtype: bool

实际需求是支持传入Series组成的列表,直接返回聚合后的布尔型Series,类似sum(search)的调用形式。但直接调用Python内置sum(search)会返回数值型计数结果,示例如下:

sum(search)
# 输出
0    2
1    0
dtype: int64

目前可通过自定义循环函数实现逐位与聚合的需求,代码如下:

def sum_bool_series(bool_list):
      r = bool_list[0]
      for l in bool_list[1:]:
          r = r & l
      return r

需要确认pandas是否提供对应的原生实现方式。

原生实现方法

pandas原生支持该类聚合需求,不需要手写循环:

  • 逐位与聚合(即所有Series对应位置均为True时结果才为True,和自定义函数逻辑一致):将列表中所有布尔Series按列拼接后,对每行做全True判断即可
    import pandas as pd
    and_result = pd.concat(search, axis=1).all(axis=1)
    
    该方法会自动按索引对齐所有Series,避免手写循环时可能出现的索引不匹配问题,返回值直接是布尔类型Series。
  • 逐位或聚合(即任意一个Series对应位置为True时结果就为True,对应|运算符的聚合逻辑):将all()替换为any()即可
    or_result = pd.concat(search, axis=1).any(axis=1)
    

如果偏好函数式写法,也可以使用functools.reduce实现链式运算,但可读性和鲁棒性弱于上述concat方案:

from functools import reduce
and_result = reduce(lambda x, y: x & y, search)

注意:不要直接使用Python内置sum处理布尔Series聚合,内置sum会默认将布尔值转为整数1/0做数值求和,无法得到布尔类型的逐位聚合结果。

内容的提问来源于stack exchange,提问作者NiRR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 10:12:20