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

Pandas:将多值分类数据拆分为布尔列的实现方法

实现多值列的存在性布尔标识列

没问题,这需求其实是把逗号分隔的多值列,转换成对应每个可能值的存在性布尔列(True表示该行包含该值,False表示不包含),用Pandas可以很简洁地实现,我给你一步步来:

步骤1:准备示例数据

先把你给出的示例DataFrame创建出来:

import pandas as pd

df = pd.DataFrame({'foo': ['b', 'a,b', 'a,c', 'a,b,c'], 'bar': ['X,Y', 'Z', 'Z,X', 'X,Y']})

步骤2:拆分多值列为布尔标识列

Pandas的str.get_dummies()方法专门用来处理这类分隔符分隔的多值列,它会自动生成每个唯一值的列,然后我们把数值类型转成布尔类型(0→False,1→True):

# 处理foo列,生成a、b、c的布尔列
foo_bool = df['foo'].str.get_dummies(sep=',').astype(bool)

# 处理bar列,生成X、Y、Z的布尔列
bar_bool = df['bar'].str.get_dummies(sep=',').astype(bool)

步骤3:合并结果并调整列顺序

把两部分的布尔列合并成一个DataFrame,如果你需要严格按照a、b、c、X、Y、Z的顺序排列列,可以用reindex()调整:

# 合并两个布尔列集合
result = pd.concat([foo_bool, bar_bool], axis=1)

# 按照指定顺序调整列
result = result.reindex(columns=['a', 'b', 'c', 'X', 'Y', 'Z'])

最终结果

运行完上面的代码后,result就是你要的表格:

abcXYZ
0FalseTrueFalseTrueTrueFalse
1TrueTrueFalseFalseFalseTrue
2TrueFalseTrueTrueFalseTrue
3TrueTrueTrueTrueTrueFalse

补充说明

  • 如果你的数据里有空字符串或者缺失值,str.get_dummies()会生成全False的对应列,完全符合需求;
  • 这个方法比循环判断每个值要高效得多,尤其适合处理大规模数据集。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:09:02