如何在Python中的Ordinal列上创建虚拟变量

时间:2017-03-24 19:31:33

标签: pandas python-3.6 one-hot-encoding

我是Python新手。我使用pandas get_dummies在分类列上创建了虚拟列。如何在序数列上创建虚拟列(比如列等级值为1,2,3 ...,10)

1 个答案:

答案 0 :(得分:1)

考虑数据框df

df = pd.DataFrame(dict(Cats=list('abcdcba'), Ords=[3, 2, 1, 0, 1, 2, 3]))
df

  Cats  Ords
0    a     3
1    b     2
2    c     1
3    d     0
4    c     1
5    b     2
6    a     3

<强> pd.get_dummies
在任一列上工作相同 df.Cats

pd.get_dummies(df.Cats)

   a  b  c  d
0  1  0  0  0
1  0  1  0  0
2  0  0  1  0
3  0  0  0  1
4  0  0  1  0
5  0  1  0  0
6  1  0  0  0

df.Ords

   0  1  2  3
0  0  0  0  1
1  0  0  1  0
2  0  1  0  0
3  1  0  0  0
4  0  1  0  0
5  0  0  1  0
6  0  0  0  1

同时

pd.get_dummies(df)

   Ords  Cats_a  Cats_b  Cats_c  Cats_d
0     3       1       0       0       0
1     2       0       1       0       0
2     1       0       0       1       0
3     0       0       0       0       1
4     1       0       0       1       0
5     2       0       1       0       0
6     3       1       0       0       0

请注意,它分为Cats但不是Ords

让我们通过添加另一个Cats2列并调用pd.get_dummies

来扩展此功能
pd.get_dummies(df.assign(Cats2=df.Cats)))

   Ords  Cats_a  Cats_b  Cats_c  Cats_d  Cats2_a  Cats2_b  Cats2_c  Cats2_d
0     3       1       0       0       0        1        0        0        0
1     2       0       1       0       0        0        1        0        0
2     1       0       0       1       0        0        0        1        0
3     0       0       0       0       1        0        0        0        1
4     1       0       0       1       0        0        0        1        0
5     2       0       1       0       0        0        1        0        0
6     3       1       0       0       0        1        0        0        0

有趣的是,它会拆分object列,但不会拆分数字。