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

基于Pandas处理DataFrame多值列:生成独热编码式新列

解决方案:用Pandas快速实现多值列的二进制标记

嘿,这个需求其实用Pandas的内置工具就能完美解决,根本不用自己写复杂的遍历逻辑!这本质上是**独热编码(One-Hot Encoding)**的典型场景,专门用来把这类多值分隔列转换成二进制标记列。

方法一:最简洁的内置函数法(推荐)

Pandas的str.get_dummies()方法直接支持按分隔符拆分列并生成独热编码,一步到位:

步骤1:准备示例数据(模拟你的场景)

import pandas as pd

# 模拟你的DataFrame:target_col列包含单个或多个用;分隔的值
data = {'target_col': ['A;B', 'C', 'A;C;D', 'B;E', 'A', 'F;G;H;I;J']}
df = pd.DataFrame(data)

步骤2:生成独热编码列并合并到原表

# 按;拆分并生成二进制标记列
dummies_df = df['target_col'].str.get_dummies(sep=';')

# 将结果与原DataFrame横向合并
final_df = pd.concat([df, dummies_df], axis=1)

最终效果

执行后你会得到这样的结果:

target_colABCDEFGHIJ
A;B1100000000
C0010000000
A;C;D1011000000
B;E0100100000
A1000000000
F;G;H;I;J0000011111

这个方法的优势在于:

  • 自动识别所有唯一值,无需手动收集
  • 底层是向量化操作,比手动遍历效率高得多(尤其是数据量大时)
  • 一行代码完成拆分+编码,简洁易维护

方法二:手动实现(适合理解底层逻辑)

如果你想自己实现遍历逻辑(比如学习用途),可以按以下步骤来:

# 1. 收集所有唯一值
all_unique_vals = set()
for cell_val in df['target_col']:
    # 按;拆分当前单元格的值,添加到集合中去重
    all_unique_vals.update(cell_val.split(';'))
# 转换成有序列表(可选,保证列顺序一致)
all_unique_vals = sorted(all_unique_vals)

# 2. 为每个唯一值创建标记列
for val in all_unique_vals:
    # 用lambda判断当前值是否在单元格的拆分结果中,是则标记1,否则0
    df[val] = df['target_col'].apply(lambda x: 1 if val in x.split(';') else 0)

这个方法和内置函数的效果完全一致,但因为用了apply遍历每行,数据量大时效率会比str.get_dummies()低一些,所以更适合学习原理,实际业务中优先用方法一。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:28:12