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

Pandas:将单列字符串拆分为多布尔列的技术方案问询

解决方案

这里有两种实用的方法来实现你需要的效果,直接结合代码和说明来看:

先构造原始DataFrame

首先我们先还原你提供的数据集:

import pandas as pd

df = pd.DataFrame({
    'Colors': [
        'red, white, blue',
        'white, blue',
        'blue, red',
        'white',
        'blue'
    ]
})

方法1:用pd.get_dummies快速生成(推荐)

这是最简洁的方式,Pandas的get_dummies会自动识别Colors列的所有唯一值,将每个值作为新列,并填充1/0表示该行是否匹配该值:

# 生成独热编码,去掉前缀保证列名就是原始的颜色组合
result = pd.get_dummies(df['Colors'], prefix='', prefix_sep='')

# 如果需要和你示例中的列顺序一致(按原始唯一值出现顺序),可以调整列顺序
unique_colors = df['Colors'].unique()
result = result[unique_colors]

运行后得到的结果:

red, white, blue  white, blue  blue, red  white  blue
0                 1            0          0      0     0
1                 0            1          0      0     0
2                 0            0          1      0     0
3                 0            0          0      1     0
4                 0            0          0      0     1

如果想要**布尔值(True/False)**而非0/1,只需要添加dtype=bool参数:

result = pd.get_dummies(df['Colors'], prefix='', prefix_sep='', dtype=bool)

方法2:手动构造(适合理解原理)

如果你想更清晰地看到逻辑,可以手动遍历唯一值生成列:

# 获取所有唯一的颜色组合
unique_vals = df['Colors'].unique()

# 对每一行生成对应布尔值的Series
result = df['Colors'].apply(
    lambda x: pd.Series(
        [val == x for val in unique_vals], 
        index=unique_vals
    )
).astype(int) # 若要布尔值则去掉.astype(int)

这个方法的逻辑是:对每行的颜色值,逐一和所有唯一值对比,匹配则标记为True/1,否则为False/0,最后组合成DataFrame。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:10:57