2016-12-23 13 views
2

問題の声明:私はこの単一のサンプルワンホットエンコードしたい:ワンホットエンコーディング単一のサンプルパンダ

In [2]: single_sample = pd.DataFrame({"Color":['Green']}) 

      Color 
0   'Green' 

このデータフレームのために使用したのと同じワンホットエンコーディングを持つ:

In [3]: df = pd.DataFrame({"Color":['Red', 'Blue', 'Green', 'Orange']}) 

      Color 
0   'Red'   
1   'Blue'  
2   'Green'  
3   'Orange' 

ワンホットエンコードを適用すると、大きなデータフレームは次のようになります。

In [4]: pd.get_dummies(df) 

     Color_Blue Color_Green Color_Orange Color_Red 
0    0   0    0   1 
1    1   0    0   0 
2    0   1    0   0 
3    0   0    1   0 

そして、私は単一のサンプルを望みます。

 Color_Blue Color_Green Color_Orange Color_Red 
0    0   1    0   0 

私はこれを達成すると考え唯一の方法は、データフレームに単一のサンプルを連結し、その後ワンホットエンコード動作をプリフォームまたは私は特定の列に適用でき、私自身のワンホットエンコーダを書くことです。

.get_dummies()関数が適用される操作を何らかの形で保存する方法がありますか?

答えて

2

あなたはdf1の列で列のreindexを使用することができます。

df1 = pd.get_dummies(df) 
print (df1) 
    Color_Blue Color_Green Color_Orange Color_Red 
0   0   0    0   1 
1   1   0    0   0 
2   0   1    0   0 
3   0   0    1   0 

print (pd.get_dummies(single_sample).reindex(columns=df1.columns, fill_value=0)) 
    Color_Blue Color_Green Color_Orange Color_Red 
0   0   1    0   0 

もう1つの可能な解決策は、list comprehensionで新しい列を作成することです:

cols = ('Color_' + df.Color.sort_values()).unique().tolist() 
print (cols) 
['Color_Blue', 'Color_Green', 'Color_Orange', 'Color_Red'] 

print (pd.get_dummies(single_sample).reindex(columns=cols, fill_value=0)) 
    Color_Blue Color_Green Color_Orange Color_Red 
0   0   1    0   0 
関連する問題