2016-07-02 6 views
2

は、私は私のデータフレームに(質問を理解することは重要ではありません)ワンホットエンコーディングを適用するには、この方法を求めていました:データフレーム内の列を一意にする方法は?

train = pd.concat([train, pd.get_dummies(train['Canal_ID'])], axis=1, join_axes=[train.index]) 
train.drop([11,'Canal_ID'],axis=1, inplace = True) 

train = pd.concat([train, pd.get_dummies(train['Agencia_ID'])], axis=1, join_axes=[train.index]) 
train.drop([1382,'Agencia_ID'],axis=1, inplace = True) 

は残念ながら、元のデータフレームが値として番号を持っていた、これはなぜダミー変数を取得した後で同じ名前の列がたくさんあります。どうすればそれらをユニークにすることができますか?

答えて

1

df.columns = range(df.shape[1]) 

はサンプル:

df = pd.DataFrame({'A':[1,2,3], 
        'B':[4,5,6], 
        'C':[7,8,9], 
        'D':[1,3,5], 
        'E':[5,3,6], 
        'F':[7,4,3]}) 
print (df) 
    A B C D E F 
0 1 4 7 1 5 7 
1 2 5 8 3 3 4 
2 3 6 9 5 6 3 

print (df.shape) 
(3, 6) 

df.columns = range(df.shape[1]) 
print (df) 
    0 1 2 3 4 5 
0 1 4 7 1 5 7 
1 2 5 8 3 3 4 
2 3 6 9 5 6 3 
1

私は乱数を列の元のIDに追加します。

あなたが shaperangeすることにより、新しいカラム名を設定することができ
new_cols = train.columns 
new_cols = new_cols.map(lambda x: "{}-{}".format(x, randint(0,100)) 
train.columns = new_cols 
+0

を持っています私は衝突を恐れているが、かわいいいいアイデア)) – Rocketq

+1

さて、UUIDのランダントを変更しても衝突は起こりません – kiril

2

これを試してみてください:get_dummiesは、 "接頭辞" 方法

df = pd.DataFrame({'A': ['a', 'b', 'a'], 'B': ['b', 'a', 'c'], 
        'C': [1, 2, 3]}) 

pd.get_dummies(df, prefix=['col1', 'col2']) 
    C col1_a col1_b col2_a col2_b col2_c 
0 1  1  0  0  1  0 
1 2  0  1  1  0  0 
2 3  1  0  0  0  1 
関連する問題