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

如何将单列分类的NumPy数组/Pandas DataFrame转为多列布尔矩阵?

高效实现单列分类数据转布尔矩阵(Pandas/NumPy方案)

嘿,这个需求根本不用自己写迭代逻辑!Pandas和NumPy都有现成的高效方法,尤其是Pandas的内置函数完全贴合你的场景,性能比手动循环强太多,下面给你详细拆解:

首选方案:Pandas get_dummies() 一步到位

Pandas的pd.get_dummies()就是专门为分类数据编码设计的工具,直接生成对应列的矩阵,再转成布尔类型即可:

步骤示例

  1. 先模拟你的原始DataFrame:
import pandas as pd

# 示例数据:单列分类数据
df = pd.DataFrame({'category': ['Dog', 'Cat', 'Dog', 'Bird', 'Cat', 'Dog']})
  1. 生成布尔矩阵:
# 先生成0/1编码矩阵,再转成布尔值
bool_matrix = pd.get_dummies(df['category']).astype(bool)

运行后得到的结果就是你要的布尔矩阵:

BirdCatDog
0FalseFalseTrue
1FalseTrueFalse
2FalseFalseTrue
3TrueFalseFalse
4FalseTrueFalse
5FalseFalseTrue

额外细节

  • 如果你想保留所有可能的分类(哪怕当前数据里没出现),可以先把列转成Categorical类型再处理:
    df['category'] = pd.Categorical(df['category'], categories=['Dog', 'Cat', 'Bird', 'Fish'])
    bool_matrix = pd.get_dummies(df['category']).astype(bool)
    
    这样会自动生成Fish列,所有值都是False。
  • 这个方法是Pandas内部优化的向量化操作,数据量越大,比手动迭代的速度优势越明显。

备选:纯NumPy实现思路

如果偏好NumPy,可以先把分类映射成整数编码,再用单位矩阵索引生成布尔矩阵:

import numpy as np

# 提取唯一分类并建立映射关系
categories = df['category'].unique()
cat_to_idx = {cat: idx for idx, cat in enumerate(categories)}
# 把分类转成整数编码
encoded = df['category'].map(cat_to_idx).values

# 生成布尔矩阵
bool_matrix_np = np.eye(len(categories), dtype=bool)[encoded]

不过这个方法需要手动处理分类映射,不如Pandas方案简洁,推荐优先用get_dummies()。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:29:08