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

Pandas DataFrame分类数据转数值及列名转多列实现方法

处理Pandas分号分隔列转多值布尔列

先给出可复现的测试数据:

import pandas as pd
df = pd.DataFrame({'id': [1, 2], 'Right': ['a;b;c', ''], 'Left': ['', 'c;e;d']})

步骤1:合并互斥的Right/Left列

因为每行的Right和Left只有一列有有效数据,先把两列合并成一列,方便后续处理:

# 替换空字符串为缺失值,再用另一列填充
df['values'] = df['Right'].replace('', pd.NA).fillna(df['Left'])

步骤2:拆分分号分隔的字符串为列表

把每个单元格的分号分隔字符串拆成值列表:

df['values'] = df['values'].str.split(';')

步骤3:展开列表为多行

用explode把列表中的每个值拆成单独一行,让每个id对应多个值行:

exploded_df = df.explode('values')

步骤4:生成布尔值哑变量

用get_dummies把每个值转换成布尔列,dtype=bool确保输出为布尔类型:

dummies = pd.get_dummies(exploded_df['values'], dtype=bool)

步骤5:按id聚合合并结果

把同一id的多个行聚合,只要值出现过就标记为True,最后重置索引恢复id列:

result = exploded_df[['id']].join(dummies).groupby('id').max().reset_index()

最终得到的result结构如下:

idabcde
1TrueTrueTrueFalseFalse
2FalseFalseTrueTrueTrue

如果需要强制包含f列(即使没有对应数据),可以在生成哑变量时指定列范围:

dummies = pd.get_dummies(exploded_df['values'], dtype=bool, columns=['a','b','c','d','e','f'])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 13:13:16