如何将哑变量转换为原始分类变量Python代码

最近做实验发现预处理的时候将原始分类变量列删除了,只留下了哑变量列表,研究了一下怎么基于哑变量列表重新编写原始分类列表并将其插入数据中。

一、哑变量列表中已经包含原始分类名称

在最初进行数据预处理时候,如果最后得到的哑变量是“分类名称_分类”这种形式的,可以采用下面代码重新构建原始分类列表。

import pandas as pd

# 假设我们有一个包含哑变量的DataFrame
data = {
    'Category_A': [1, 0, 1, 0, 0, 0],
    'Category_B': [0, 1, 0, 0, 1, 0],
    'Category_C': [0, 0, 0, 1, 0, 1]
}

df = pd.DataFrame(data)

# 使用idxmax方法找到每行中值为1的列的索引
# 然后使用这些索引来获取对应的类别值
# 由于哑变量的列名包含了原始类别名(例如'Category_A'中的'A'),我们可以使用str.split方法来提取它
original_categories = df.idxmax(axis=1).str.split('_').str[1]

# 将原始类别值添加到DataFrame中
df['Original_Category'] = original_categories

print(df)

最后得出的结果如下:在这里插入图片描述

二、哑变量列表中不包含原始分类名称

1.如果最后得到的哑变量没有类别名称这种形式的,可以采用下面代码重新构建原始分类列表。

import pandas as pd

# 假设我们有一个包含哑变量的DataFrame
data = {
    '0': [1, 0, 0, 0, 0, 0],
    '1': [0, 1, 0, 0, 0, 0],
    '2': [0, 0, 1, 0, 0, 0],
    '3': [0, 0, 0, 1, 0, 0],
    '4': [0, 0, 0, 0, 1, 0],
    '5': [0, 0, 0, 0, 0, 1]
}

df = pd.DataFrame(data)

# 创建一个映射字典,将哑变量的列名映射回原始的类别值
# 假设原始类别值是['A', 'B', 'C', 'D', 'E', 'F']
category_map = {str(i): category for i, category in enumerate(['A', 'B', 'C', 'D', 'E', 'F'])}

# 使用idxmax方法找到每行中值为1的列的索引
# 然后使用映射字典将索引转换回原始的类别值
original_categories = df.idxmax(axis=1).map(category_map)

# 将原始类别值添加到DataFrame中
df['Original_Category'] = original_categories

print(df)

最终输出结果如下:
在这里插入图片描述

2.如果最后得到的哑变量知识类别名称,构建原始分类列代码如下:

import pandas as pd

# 假设我们有一组哑变量,每个手术类型对应一个列,值为0或1
data = {
    'A': [1, 0, 0, 0, 0, 0],
    'B': [0, 1, 0, 0, 0, 0],
    'C': [0, 0, 1, 0, 0, 0],
    'D': [0, 0, 0, 1, 0, 0],
    'E': [0, 0, 0, 0, 1, 0],
    'F': [0, 0, 0, 0, 0, 1]
}

df = pd.DataFrame(data)

# 使用idxmax方法找到每行中值为1的列的索引
# 然后使用这些索引来获取对应的类别值
original_categories = df.idxmax(axis=1)

# 将原始类别值添加到DataFrame中
df['原始类型'] = original_categories

print(df)

结果如下:
在这里插入图片描述

希望可以帮助到大家!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值