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

如何对多列数据进行one-hot编码?寻求高效实现方案

问题与解答

问题

我搜索相关主题时得到的答案都不符合需求。假设我有如下表格:

ItemN1N2N3N4
Item11248
Item22367
Item34579
Item41567
Item53478

我希望对其进行one-hot编码,得到如下结果:

Item123456789
Item1110100010
Item2011001100
Item3000110101
Item4100011100
Item5001100110

请问这个需求是否可行?我现在正在写循环遍历每行的代码,但想知道有没有更高效的实现方式。

解答

这个需求完全可行,且无需手动编写低效循环,用Pandas的向量化操作就能快速实现,步骤如下:

  1. 将原始宽格式数据重塑为长格式,保留Item作为分组标识
  2. 利用交叉表生成one-hot编码,自动统计每个数值在对应Item行中的出现情况(出现则为1,未出现为0)
  3. 按需调整列的排序,匹配目标格式

示例代码

import pandas as pd

# 构造原始数据(实际使用时可通过pd.read_csv等方法加载)
df = pd.DataFrame({
    'Item': ['Item1', 'Item2', 'Item3', 'Item4', 'Item5'],
    'N1': [1, 2, 4, 1, 3],
    'N2': [2, 3, 5, 5, 4],
    'N3': [4, 6, 7, 6, 7],
    'N4': [8, 7, 9, 7, 8]
})

# 重塑数据:把N1-N4列转为行数据
melted_df = df.melt(id_vars='Item', value_name='value')

# 生成one-hot编码并按Item聚合
one_hot_result = pd.crosstab(melted_df['Item'], melted_df['value']).reset_index()

# 按数值从小到大排序列
one_hot_result = one_hot_result[['Item'] + sorted(one_hot_result.columns.drop('Item'))]

# 输出结果
print(one_hot_result)

这段代码的输出与你期望的结果完全一致,且向量化操作比手动循环效率高得多,处理大规模数据集时优势尤为明显。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 14:07:01