为何pd.get_dummies()处理后丢失Title列?如何保留该列生成哑变量
保留Title列的标签哑变量生成方案
你的问题出在第一步处理时只提取了Tags列,导致Title丢失。下面提供两种可行解决方案:
方案一:修改原有代码逻辑,保留Title列
调整代码,在拆分标签的同时保留Title和原索引,确保分组时能关联回对应标题:
# 拆分标签并展开,同时保留原数据的Title列 data_exploded = data1.assign(Tags=data1.Tags.str.split(',')).explode('Tags').reset_index() # 生成哑变量后,按原索引和Title分组求和(同一索引对应唯一Title) result = pd.get_dummies(data_exploded, columns=['Tags'], prefix='', prefix_sep='') \ .groupby(['index', 'Title'], as_index=False).sum() \ .drop('index', axis=1)
方案二:使用更简洁的str.get_dummies方法
Pandas的str.get_dummies可以直接对逗号分隔的标签生成哑变量,无需拆分展开,一步到位保留Title:
# 拼接Title列和标签哑变量列 result = pd.concat([data1['Title'], data1['Tags'].str.get_dummies(sep=',')], axis=1)
示例验证
输入示例数据集:
| Title | Tags |
|---|---|
| A | Java, C++ |
| B | C++, Html |
| C | Java, Python, Html |
| D | Python, C++, Html |
执行上述任意方案后,均可得到预期结果:
| Title | Java | C++ | Html | Python |
|---|---|---|---|---|
| A | 1 | 1 | 0 | 0 |
| B | 0 | 1 | 1 | 0 |
| C | 1 | 0 | 1 | 1 |
| D | 0 | 1 | 1 | 1 |
内容的提问来源于stack exchange,提问作者Ann
相关产品推荐
相关产品推荐

