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

Pandas技术问询:将单列拆分为含唯一值的多列

解决方案:将单列文本转换为独热编码形式

嘿,这个需求用Pandas就能轻松搞定,给你两个实用的方案:

方案一:用str.split + get_dummies快速实现

这个方法利用Pandas的字符串处理和独热编码工具,代码简洁高效:

首先先构造你的示例DataFrame:

import pandas as pd

df = pd.DataFrame({'A': ['Me', 'Myself', 'and', 'Irene', 'Me, Myself, and Irene']})

然后执行以下步骤:

# 1. 把每行的字符串按", "拆分,展开为多行并保留原索引
split_series = df['A'].str.split(', ', expand=True).stack()
# 2. 生成每个词的独热编码
dummies_df = pd.get_dummies(split_series)
# 3. 按原索引分组求和,合并同一行的编码结果
result = dummies_df.groupby(level=0).sum()

执行后result就是你要的格式啦!原理是把多词的行拆分成单个词的行,生成编码后再按原行索引合并,自动把同一行的多个词的1累加起来。

方案二:自定义编码函数(更直观可控)

如果你想更清楚地控制每一步,可以用自定义函数来实现:

# 第一步:收集所有出现过的唯一词汇,作为结果的列名
all_unique_words = set()
for text in df['A']:
    all_unique_words.update(text.split(', '))
# 手动指定列顺序和示例一致
all_unique_words = ['Me', 'Myself', 'and', 'Irene']

# 第二步:定义编码函数,判断每行是否包含对应词汇
def encode_single_row(row):
    current_words = set(row['A'].split(', '))
    return pd.Series(
        [1 if word in current_words else 0 for word in all_unique_words],
        index=all_unique_words
    )

# 第三步:把函数应用到DataFrame的每一行
result = df.apply(encode_single_row, axis=1)

这个方案更灵活,比如你可以随时调整列的顺序,或者修改匹配规则(比如忽略大小写之类的)。

两种方案最终都会输出你需要的结果:

Me  Myself  and  Irene
0    1       0     0     0
1    0       1     0     0
2    0       0     1     0
3    0       0     0     1
4    1       1     1     1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:12:44