如何基于数据框的独热编码种族列生成新的Race分类列?
实现方法
以下是基于Python pandas库的两种常用实现方案:
方案1:idxmax+映射(兼容性强,列顺序不影响结果)
利用独热编码每行仅1个取值为1的特征,先提取每行取值为1的列名,再通过字典映射得到对应编码:
import pandas as pd # 定义种族列到编码的映射关系 race_mapping = { 'White': 0, 'Black': 1, 'Asian': 2, 'Hisp': 3, 'Other': 4 } # 提取五种种族列,取每行最大值对应的列名,映射后赋值给Race列 df['Race'] = df[['White', 'Black', 'Asian', 'Hisp', 'Other']].idxmax(axis=1).map(race_mapping)
方案2:点积运算(效率更高,适合大数据量)
直接给对应列赋予目标权重,通过点积运算直接得到结果,需要注意列顺序和权重顺序要完全匹配:
# 权重顺序和前面选择的列顺序一一对应:White对应0、Black对应1、以此类推 df['Race'] = df[['White', 'Black', 'Asian', 'Hisp', 'Other']].dot([0,1,2,3,4])
注意事项
两种方案都默认你的原始数据中,每行的五种种族列有且仅有一个取值为1,没有多选或者全0的异常情况,如果存在异常数据需要先做清洗再执行上述操作。
内容的提问来源于stack exchange,提问作者Evan
相关产品推荐
相关产品推荐

