You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将DataFrame布尔列映射为分类列class的实现方法

问题:根据指定列值生成新的class列

给定如下DataFrame:

import pandas as pd

data = \
{'id': [1, 2, 3, 4, 5],
 'A': [1, 0, 0, 0, 0],
 'B': [0, 0, 1, 0, 0],
 'C': [0, 0, 0, 0, 1],
 'D': [0, 1, 0, 0, 0],
 'E': [0, 0, 0, 1, 0]}

df = pd.DataFrame(data)

需要新增一列class,规则为:

  • 当A=1时,class取值0
  • 当B=1时,class取值1
  • 当C=1时,class取值2
  • 当D=1时,class取值3
  • 当E=1时,class取值4

解决方案

方法1:idxmax+映射字典

先提取每行中值为1的列名,再通过字典映射为目标数值:

class_map = {'A': 0, 'B': 1, 'C': 2, 'D': 3, 'E': 4}
# 仅针对A-E列操作,取每行最大值对应的列名后映射
df['class'] = df[['A', 'B', 'C', 'D', 'E']].idxmax(axis=1).map(class_map)

方法2:矩阵乘法dot

直接用列对应的权重值与列值相乘求和,高效简洁:

# 对应A-E列的权重依次为0、1、2、3、4
weights = [0, 1, 2, 3, 4]
df['class'] = df[['A', 'B', 'C', 'D', 'E']].dot(weights)

预期输出

id  A  B  C  D  E  class
0   1  1  0  0  0  0      0
1   2  0  0  0  1  0      3
2   3  0  1  0  0  0      1
3   4  0  0  0  0  1      4
4   5  0  0  1  0  0      2

内容的提问来源于stack exchange,提问作者arilwan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 15:20:51