2017-12-18 156 views
0

我必須爲可能有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 

回答

3

使用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