如何将DataFrame中含n个分类的列转换为n个二元值列?
实现方案
你要的分类转二元01列的需求完全不需要自行编写遍历逻辑实现,pivot_table可以满足需求,同时pandas还有更适配这个场景的内置函数pd.get_dummies(独热编码)可以更简单的完成转换。
方法1:使用pd.get_dummies(推荐,代码最简洁)
这个方法是pandas专门为分类变量转独热编码设计的API,性能和易用性都最优:
import pandas as pd # 示例数据构造 df = pd.DataFrame({ 'id': [1,2,10], 'gender': ['M','F','F'], 'name': ['John','Mary','Kate'], 'status': ['Withdrawn','Pass','Fail'] }) # 核心转换逻辑 result = pd.concat( [df.drop(columns='status'), pd.get_dummies(df['status']).astype(int)], axis=1 )
方法2:使用pivot_table实现
如果你需要同时做其他聚合运算,可以用你提到的pivot_table完成:
# 先添加计数列用于聚合 df['tag'] = 1 result = df.pivot_table( index=['id', 'gender', 'name'], # 把除了status之外的所有列作为分组索引 columns='status', values='tag', fill_value=0, # 没有匹配到的分类填充为0 aggfunc='sum' ).reset_index() # 把分组索引转回普通列 result.columns.name = None # 去掉自动生成的status列名前缀
两种方法输出的结果都完全符合你要求的格式。
内容的提问来源于stack exchange,提问作者Jamess11
相关产品推荐
相关产品推荐

