如何用Pandas将多列分类标识转换为单列分类值
如何用Pandas将多列分类标识转换为单列分类值
我来帮你搞定这个问题!这种把多列独热编码格式的分类数据转成单列标签的需求在数据分析里太常见了,用Pandas有好几种简单高效的实现方式,我给你详细说说:
首先先确认下你的原始数据结构:
>>> results.head() HOME_WINS DRAW AWAY_WINS ID 0 0 0 1 1 0 1 0 2 0 0 1 3 1 0 0 4 0 1 0
方法一:用idxmax+字典映射
这个方法逻辑清晰,容易理解:
- 先找到每行中值为1的列(也就是最大值所在列)
- 把列名映射成你需要的0/1/2数值
代码实现:
# 获取每行对应类别的列名 class_columns = results.idxmax(axis=1) # 定义列名到目标数值的映射关系 class_mapping = {'HOME_WINS': 0, 'DRAW': 1, 'AWAY_WINS': 2} # 生成目标列 results['SCORE'] = class_columns.map(class_mapping)
执行后就能得到你想要的结果:
>>> results['SCORE'].head() ID 0 2 1 1 2 2 3 0 4 1 Name: SCORE, dtype: int64
方法二:用矩阵点乘dot(更简洁)
如果追求代码简洁,这个方法绝对高效,利用矩阵点乘的特性直接计算:
results['SCORE'] = results.dot([0, 1, 2])
原理很简单:每行的三个值是0或1,和[0,1,2]做矩阵点乘后,结果就是对应位置的数值(比如第一行[0,0,1]点乘后就是0*0 + 0*1 +1*2=2),一步到位得到目标列!
小提示
如果你的数据存在特殊情况(比如某行有多个1或者全0),建议先做数据校验,但根据你给出的示例数据,每行只有一个1,这两个方法都能完美适用。
备注:内容来源于stack exchange,提问作者Noë Mastrorillo
相关产品推荐
相关产品推荐

