分类到二进制 - 我做错了什么?

时间:2017-05-23 14:18:30

标签: python pandas numpy math

我正在从成人收入数据集(< 50K和> = 50K)中转换目标列,我想要一个零为< 50K和一个1超过或等于50K。

当我运行下面的代码时,它会创建两列,当我在列中希望的内容只是&lt; 50K列出的位置替换为1并且其中列出了&gt; 50K将其替换为0 < / p>

cols_to_transform = [ 'Target' ]
df_with_dummies = pd.get_dummies(columns = cols_to_transform, data=data)

>      Native Country  Target_<=50K  Target_>50K  
>0      United-States             1            0  
>1      United-States             1            0  
>2      United-States             1            0  
>3      United-States             1            0  
>4               Cuba             1            0  

关于我出错的地方以及我如何将这个分类映射到一列的任何想法,比如说'目标'?

4 个答案:

答案 0 :(得分:2)

假设您引用此dataset,您可以使用 map 方法创建该列:

data [“Target_binary”] = data [“Target”]。map(lambda x:1 if x ==“&gt; 50K”else 0)

答案 1 :(得分:0)

将字典replaceassign用于新列:

dict = {'<=50K':1,'>50K':0}
dfout = df.assign(target_bin=df['target'].replace(dict)

答案 2 :(得分:0)

pd.get_dummies应该将列拆分为原始中每个唯一值的一列。您只想将布尔列转换为整数零或一个

data['Target_binary'] = data.Target.eq('>50K').astype(int)

答案 3 :(得分:0)

假设数据框中有两个分类值“a”,“b”:

import pandas as pd
import numpy as np
data = pd.DataFrame({"Target":pd.Series(np.random.randn(5)*50000), "Value":["a","b","a","a","b"]})
cols_to_transform = ["Values"]
df_with_dummies = pd.get_dummies(columns = cols_to_transform, data=data)

然后,如果您想将“a”编码为1而将“b”编码为0,则df_with_dummies将获得以下内容:

         Target  Value_a  Value_b
0   4329.130662        1        0
1 -64012.592710        0        1
2 -21050.741809        1        0
3 -32438.538928        1        0
4  13843.408700        0        1

其中Value_a列正是您要查找的内容。或者你也可以这样做:

data["result"] = (data["Value"]=="a").astype(int)