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

问题描述:

我必须为可能有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 

使用get_dummies + reindex上的列 -

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

根据该文档,reindex将 -

顺应数据帧到具有可选的填充逻辑新的索引,将 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 
+0

请你也解释REINDEX在你前面回答? – Siddharth

+1

@Siddharth添加了文档摘录,这有帮助吗? –

+0

@COLDSPEED谢谢 – Siddharth