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
相关产品推荐
相关产品推荐

