使用虚拟变量为数值创建固定大小的数据框

时间:2017-12-18 12:44:43

标签: python pandas dataframe dummy-variable

我必须为可能有16个值(0-15)的列创建虚拟变量,但是当我根据它创建虚拟变量时,不必具有所有16个值:

  my_column
0  3
1  4
2  7
3  1
4  9

我希望我的虚拟变量有16列或更多 - 提前由我修复的任何其他值,列名称中的数字对应my_column的值,但如果my_column只有,让我们说,来自16个可能值的5个值,方法pd.get_dummies将只创建5列(如此方法所预期的那样),如下所示:

 my_column  1  3  4  7  9
0  3        0  1  0  0  0
1  4        0  0  1  0  0
2  7        0  0  0  1  0
3  1        1  0  0  0  0
4  9        0  0  0  0  1

如何实现以下结果之一?

 my_column   0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15
    0  3     0  0  0  1  0  0  0  0  0  0  0  0  0  0  0  0
    1  4     0  0  0  0  1  0  0  0  0  0  0  0  0  0  0  0
    2  7     0  0  0  0  0  0  0  1  0  0  0  0  0  0  0  0
    3  1     0  1  0  0  0  0  0  0  0  0  0  0  0  0  0  0
    4  9     0  0  0  0  0  0  0  0  0  1  0  0  0  0  0  0

1 个答案:

答案 0 :(得分:3)

在列上使用get_dummies + reindex -

v = pd.get_dummies(df.my_column).reindex(columns=range(0, 16), fill_value=0)

根据文档,reindex将 -

  

使用可选的填充逻辑将DataFrame符合到新索引   NA / NaN在前一个索引中没有值的位置。

fill_value=0会用零填充所有缺失的列。

您可以使用insertconcat -

将原始列添加到结果中
v.insert(0, 'my_column', df.my_column)
v = pd.concat([df, v], 1)   # alternative to insert
v

   my_column  0  1  2  3  4  5  6  7  8  9  10  11  12  13  14  15
0          3  0  0  0  1  0  0  0  0  0  0   0   0   0   0   0   0
1          4  0  0  0  0  1  0  0  0  0  0   0   0   0   0   0   0
2          7  0  0  0  0  0  0  0  1  0  0   0   0   0   0   0   0
3          1  0  1  0  0  0  0  0  0  0  0   0   0   0   0   0   0
4          9  0  0  0  0  0  0  0  0  0  1   0   0   0   0   0   0