pandas中如何最优拆分多值列生成0/1标记的独热编码列
最优实现方案
不要用逐行apply写重复逻辑,pandas原生提供了向量化的字符串拆分哑变量方法,性能远高于自定义循环,代码也最简洁。
核心是用Series.str.get_dummies方法,直接按分隔符拆分字符串生成0-1特征列:
# 按'-'拆分coverage列,自动生成所有保障类型对应的0-1列 coverage_dummies = df['coverage'].str.get_dummies(sep='-') # 将生成的特征列拼接到原DataFrame df = pd.concat([df, coverage_dummies], axis=1)
这个方案的优势:
- 性能极强:底层是C层实现的向量化运算,比逐行
apply的Python循环快数十到上百倍,数据量越大优势越明显 - 零重复代码:不需要逐列编写判断逻辑,会自动识别所有出现过的保障类型生成对应列,后续新增保障类型取值也不需要修改代码
- 逻辑准确:只要字符串中包含对应保障类型片段,对应列就会赋值为1,否则为0,完全匹配需求
如果你只需要固定生成DAMAGE、THEFT、WARRANTY_EXTENSION、FRAUDULENT_USE这4列,不需要其他自动识别出的列,可以在生成哑变量后做列筛选:
target_columns = ['DAMAGE', 'THEFT', 'WARRANTY_EXTENSION', 'FRAUDULENT_USE'] coverage_dummies = df['coverage'].str.get_dummies(sep='-')[target_columns] df = pd.concat([df, coverage_dummies], axis=1)
注意:如果后续你的保障类型取值中出现本身包含
-的类型名,才需要额外调整拆分逻辑,基于你当前给出的取值范围,上述方案是兼顾效率和代码简洁度的最优解。
内容的提问来源于stack exchange,提问作者Tonino Fernandez
相关产品推荐
相关产品推荐

