如何使用get_dummies从现有列创建新列

时间:2019-01-30 19:21:31

标签: python pandas dataframe machine-learning

我有这个数据框:

    column1   column2   column3   column4
0     A          A         D         D
1     B          B         D         D 
2     C          C         B         D
3     A          D         D         A 

我想将column1-column4中的类别作为新列添加到数据框,并用1和0填充它,如下所示:

    column1   column2   column3   column4   A     B     C     D
0     A          A         D         D      1     0     0     1
1     B          B         D         D      0     1     0     1
2     C          C         B         D      0     1     1     1
3     A          D         D         A      1     0     0     1

所以我尝试了一些代码:

pd.concat([df, df['column1'].str.get_dummies(sep=',')], axis=1)

我从列1中得到1´和0´。如何修改我的代码以获取所有1和0 条件是:

0 & 0 = 0
0 & 1 = 1
1 & 0 = 1
1 & 1 = 1

我也尝试过:

df1 = df.column1.str.get_dummies(sep=',')
df2 = df.column2.str.get_dummies(sep=',') 
df3 = df.column3.str.get_dummies(sep=',') 
df4 = df.column4.str.get_dummies(sep=',') 
frames = [df1, df2, df3, df4]
result = pd.concat(frames, sort=True)

但是我希望类别作为新列仅出现一次,并且值1代表所有出现。你能帮我吗:)

1 个答案:

答案 0 :(得分:0)

get_dummies方法根据系列的值计算类别数,因此需要从中提取虚拟变量的系列值(在您的情况下为列)包含所有想要的类别要获取,换句话说,您必须具有一列,其中所有4列的值都用分隔符连接在一起。为了将所有值放在一起,我们使用:

new_col = df[['column1', 'column2', 'column3', 'column4']].apply(lambda x: '|'.join(x), axis=1)

基本上将所有列值都用“ |”连接到单个字符串中分隔符按行获取此系列:

0    A|A|D|D
1    B|B|D|D
2    C|C|B|D
3    A|D|D|A

现在,我们仅将get_dummies(sep='|')方法应用于上一列,以获取考虑到这些列中存在的所有类别的虚拟变量,可以在一行代码中将其获取为(我也将其与原始数据集以获取您要求的格式):

df = pd.concat([df, df[['column1', 'column2', 'column3', 'column4']]
       .apply(lambda x: '|'.join(x), axis=1)
       .str
       .get_dummies(sep='|')], axis=1)