1

我有一个数据框,其中一列如下所示:

col
A B C
B C X
U

我想生成一些虚拟变量,告诉我一行是否包含特定值。也就是说,在示例中,我想生成 5 个虚拟变量(d_A、d_B、d_C、d_X、d_U),以便数据看起来像

col      d_A      d_B      d_C      d_X      d_U
A B C    1        1        1        0        0
B C X    0        1        1        1        0
...

我有很多很多可能的值,所以我不能用手轻易地做到这一点。知道如何在熊猫中做到这一点(在矢量化模式下)吗?

谢谢!

4

1 回答 1

1

使用str.get_dummiesjoinconcat

print df.col.str.get_dummies(sep=' ')
   A  B  C  U  X
0  1  1  1  0  0
1  0  1  1  0  1
2  0  0  0  1  0

print df.join(df.col.str.get_dummies(sep=' '))
     col  A  B  C  U  X
0  A B C  1  1  1  0  0
1  B C X  0  1  1  0  1
2      U  0  0  0  1  0

如果您需要更改列名,请使用列表理解:

df1 = df.col.str.get_dummies(sep=' ')
df1.columns = ['d_' + x for x in df1.columns]
print df1
   d_A  d_B  d_C  d_U  d_X
0    1    1    1    0    0
1    0    1    1    0    1
2    0    0    0    1    0

print df.join(df1)
     col  d_A  d_B  d_C  d_U  d_X
0  A B C    1    1    1    0    0
1  B C X    0    1    1    0    1
2      U    0    0    0    1    0

print pd.concat([df, df1], axis=1)
     col  d_A  d_B  d_C  d_U  d_X
0  A B C    1    1    1    0    0
1  B C X    0    1    1    0    1
2      U    0    0    0    1    0
于 2016-02-04T20:25:44.570 回答