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

如何使用Pandas将字符串列转换为多布尔列?分号分隔症状DataFrame场景解决方案咨询

嘿,这个需求我太熟了!针对症状数量多的场景,完全不用手动去列所有症状——Pandas有现成的高效方法能自动搞定,而且代码超简洁。

直接给你两种实用方案,都能完美实现你的需求:

方案一:用str.get_dummies(最简洁高效)

这个方法简直为你的场景量身定做,它会自动识别所有出现过的症状,生成对应的布尔列,一步到位:

首先构造示例数据(和你的数据结构一致):

import pandas as pd

df = pd.DataFrame({
    'id': [1, 2, 3],
    'symptoms': ['symptom1;symptom2', 'symptom2;symptom3', 'symptom1;symptom3;symptom4']
})

然后执行转换:

# 按分号拆分症状并生成布尔列(0→False,1→True)
symptom_bool = df['symptoms'].str.get_dummies(sep=';').astype(bool)

# 合并回原id列,得到最终结果
final_df = df[['id']].join(symptom_bool)

运行后final_df就是你想要的结构:

idsymptom1symptom2symptom3symptom4
1TrueTrueFalseFalse
2FalseTrueTrueFalse
3TrueFalseTrueTrue

方案二:拆分→展开→透视表(更灵活,适合复杂场景)

如果你的症状字符串有特殊格式(比如带空格、需要额外清洗),可以用这种分步的方法,灵活性更高:

# 1. 把症状列拆分成列表
df['symptom_list'] = df['symptoms'].str.split(';')

# 2. 将每个症状展开为单独行(每个id对应每个症状一行)
exploded_df = df.explode('symptom_list')

# 3. 生成透视表,统计每个id对应症状的出现次数,再转布尔值
symptom_bool = exploded_df.pivot_table(
    index='id',
    columns='symptom_list',
    aggfunc='size',  # 统计出现次数
    fill_value=0
).astype(bool)

# 4. 合并回原id列
final_df = df[['id']].merge(symptom_bool, on='id')

额外小提示:处理症状字符串的脏数据

如果你的症状里有多余空格(比如symptom1 ; symptom2),可以先做清洗:

# 去掉症状字符串里的所有空格,或者用str.strip()处理每个拆分后的症状
df['symptoms'] = df['symptoms'].str.replace(' ', '')
# 再执行上面的转换步骤

这两种方法都不需要手动枚举所有症状,不管有几百上千种症状,都能自动生成对应的列,完全适配你的场景~

内容的提问来源于stack exchange,提问作者Alon.b

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 14:27:31