Pandas 如何在Python中的序号列上创建虚拟变量

Pandas 如何在Python中的序号列上创建虚拟变量,pandas,python-3.6,one-hot-encoding,Pandas,Python 3.6,One Hot Encoding,我是Python新手。我使用pandas get_dummies在分类列上创建了虚拟列。如何在序号列上创建虚拟列(假设列评级的值为1,2,3…,10)考虑数据帧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

我是Python新手。我使用pandas get_dummies在分类列上创建了虚拟列。如何在序号列上创建虚拟列(假设列评级的值为1,2,3…,10)

考虑数据帧
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\u dummie

对任一列的作用相同
带有
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
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
带有
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.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
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\u 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

有趣的是,它同时拆分了
对象
列,而不是数字列。

您能提供一个输入和输出示例吗?如果您的值已经是数字,那么虚拟变量是什么?Colx Rating Rating_1 Rating_2 Rating_3 a 1 1 0 0 a 1 0 b 2 0 1 0 c 3 0 1表示我要创建列评级栏中的评级1、评级2、评级3这是一个很好的解决方案。如果我理解正确,我认为在这种情况下,Pandas无法知道数字列是有序的,而不是区间或连续数据,在这种情况下,创建虚拟变量是没有意义的。将
Ords
列转换为字符串:
df.Ords=df.Ords.astype(str)
应将所有数据拆分为虚拟变量?@johnchase如果在有序列上运行
pd.get_dummies
,它将按预期工作。我很惊讶地看到熊猫在数据帧上运行
pd.get_dummies
时做出了区分。@piRSquared:谢谢你的回复。这就是我观察到的,当我使用pd.get_dummies(df)时,它只对分类列进行虚拟编码。我有多个序号列,如果可能的话,我希望一次性在这些列上创建虚拟列。