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

如何将单列拆分为多列?快速实现按值生成0/1标识列的方法

如何将一列按取值拆分为0/1标记的多列(独热编码)

这其实就是数据处理里常用的**独热编码(One-Hot Encoding)**需求,我给你分享几个不同工具下的快速实现方法,适配不同场景:

Excel 实现方法(适合手动处理小数据集)

如果你用Excel处理数据,分两步就能搞定:

  1. 提取唯一值作为新列标题
    • 要是你用的是Excel 365/2021及以上版本,直接在空白单元格输入=UNIQUE(A:A)(假设原列是A列),回车后就能自动生成所有不重复的取值(也就是a、b、c、d),把这些值作为新列的标题就行。
    • 旧版Excel的话,就用「高级筛选」:选中原列数据 → 点击「数据」选项卡 → 「高级」→ 勾选「将筛选结果复制到其他位置」,设置好复制目标单元格,再勾选「选择不重复的记录」,确定后就能得到唯一值列表。
  2. 生成0/1标记
    在第一个标记单元格(比如B2)输入公式:=IF($A2=B$1,1,0),然后按住单元格右下角的填充柄,先下拉填充所有行,再右拉填充所有列,就能自动生成对应位置的1和0了。

Python Pandas 实现方法(适合批量/自动化处理)

这是效率最高的方法,Pandas专门提供了一键生成独热编码的函数:

import pandas as pd

# 构造你的示例数据
df = pd.DataFrame({'x': ['a', 'c', 'b', 'b', 'd']})

# 生成独热编码,直接用取值作为列名
one_hot = pd.get_dummies(df['x'], prefix='')

# 如果需要强制指定列的顺序(比如固定a、b、c、d的顺序),可以加一行重排
one_hot = one_hot.reindex(columns=['a', 'b', 'c', 'd'], fill_value=0)

# 把原列和新生成的编码列合并
result = pd.concat([df, one_hot], axis=1)
print(result)

运行后就能得到和你示例完全一致的结果,而且不管原列有多少种取值,都能自动识别并生成对应列,非常省心。

SQL 实现方法(适合数据库内的数据处理)

如果你的数据存在数据库里,用CASE WHEN语句就能轻松实现:

SELECT
    x,
    CASE WHEN x = 'a' THEN 1 ELSE 0 END AS a,
    CASE WHEN x = 'b' THEN 1 ELSE 0 END AS b,
    CASE WHEN x = 'c' THEN 1 ELSE 0 END AS c,
    CASE WHEN x = 'd' THEN 1 ELSE 0 END AS d
FROM your_table_name;

把your_table_name换成你的实际表名即可。如果不确定所有唯一值,不同数据库有动态生成的方法(比如MySQL的存储过程、PostgreSQL的crosstab函数),但静态的CASE WHEN是最通用的写法。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:46:39