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

如何使用多个布尔掩码并行从pandas DataFrame列中选取多个子集

向量化实现方案

你可以完全基于numpy原生操作实现需求,全程无Python层面的循环,性能远高于原生for循环,实现代码如下:

import numpy as np
import pandas as pd

# 示例数据初始化(和你提供的逻辑一致)
df_example = pd.DataFrame({'colA': [10, 20, 30], 'colB': [40, 50, 60]})
mask_matrix = np.array([
    [True,  False, True ],
    [False, False, True ],
    [True,  True,  True ],
    [False, False, False],
    [False, True,  False]
])

# 核心向量化逻辑
# 1. 提前提取colA的numpy数组,避免循环内反复索引DataFrame
colA_arr = df_example['colA'].values
# 2. 一次性取出所有掩码为True的元素,按行优先顺序返回一维数组
all_selected_vals = colA_arr[mask_matrix]
# 3. 统计每个掩码行对应的元素数量
row_selected_count = mask_matrix.sum(axis=1)
# 4. 计算数组分割的位置
split_indices = np.cumsum(row_selected_count)[:-1]
# 5. 分割数组后直接转object类型numpy数组
result = np.array(np.split(all_selected_vals, split_indices), dtype='object')

效果验证

运行你提供的打印代码,输出和原实现完全一致:

result: <class 'numpy.ndarray'>
   [10 30]
   [30]
   [10 20 30]
   []
   [20]

result.dtype: object
result.shape: (5,)

性能说明

该方案所有操作均为numpy底层C实现的向量化运算,避免了Python循环的解释器开销,当掩码行数和数据行数达到万级以上时,性能比原生for循环高出数十到数百倍。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 22:36:02