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

如何在Pandas DataFrame中将多值分类列转换为虚拟变量列并移除原列

解决方案:Pandas多值列转独热编码并合并

没问题,这是个很常见的多类别列转独热编码需求,针对逗号分隔的多值列,我们可以用Pandas的内置工具快速实现,全程代码简洁易懂,步骤如下:

步骤拆解与代码实现

1. 构造原始DataFrame(已有数据源可跳过)

先还原你给出的示例数据:

import pandas as pd

data = {
    'ID': [0, 1, 2, 3],
    'column_factors': ['fact1', 'fact1, fact2', 'fact3', 'fact1,fact4'],
    'column1': ['d', 'a', 'b', 'c'],
    'column2': ['w', 'x', 'y', 'z']
}
df = pd.DataFrame(data)

2. 统一多值列的分隔格式

观察数据能看到,column_factors里有两种分隔形式:fact1, fact2(逗号加空格)和fact1,fact4(纯逗号),为了避免生成带空格的列名,先统一成纯逗号分隔:

df['column_factors'] = df['column_factors'].str.replace(', ', ',')

3. 生成独热编码虚拟列

用Pandas的str.get_dummies()方法直接处理多值列,它会自动识别所有唯一的factor,生成对应0/1值的列:

factor_dummies = df['column_factors'].str.get_dummies(sep=',')

4. 合并数据并整理结构

把生成的虚拟列和原DataFrame合并,同时移除原来的column_factors列,最后调整列顺序匹配你的需求:

# 合并数据:去掉原列 + 合并虚拟列
result_df = pd.concat([df.drop('column_factors', axis=1), factor_dummies], axis=1)

# 调整列顺序(可选,完全匹配目标输出结构)
result_df = result_df[['ID', 'fact1', 'fact2', 'fact3', 'fact4', 'column1', 'column2']]

最终输出

运行上述代码后,result_df就是你想要的结构:

ID  fact1  fact2  fact3  fact4 column1 column2
0   0      1      0      0      0       d       w
1   1      1      1      0      0       a       x
2   2      0      0      1      0       b       y
3   3      1      0      0      1       c       z

补充说明

  • 如果你的column_factors里没有混合空格的情况,可以跳过第二步的replace操作,直接用str.get_dummies(sep=',');
  • str.get_dummies()会自动识别所有出现过的factor,不需要手动指定要生成fact1到fact4这些列,非常灵活;
  • 调整列顺序的步骤是可选的,如果不关心列的顺序,直接合并即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 21:39:07