我知道使用包熊貓可以很容易地實現它,但是因爲它太稀疏和很大(170,000 x 5000),最後我需要使用sklearn來處理數據,我想知道是否有是sklearn的一種方法。我嘗試了一種熱門編碼器,但卻被卡在「id」上。如何創建虛擬變量,然後使用scikit-learn進行聚合?
df = pd.DataFrame({'id': [1, 1, 2, 2, 3, 3], 'item': ['a', 'a', 'c', 'b', 'a', 'b']})
id item
0 1 a
1 1 a
2 2 c
3 2 b
4 3 a
5 3 b
dummy = pd.get_dummies(df, prefix='item', columns=['item'])
dummy.groupby('id').sum().reset_index()
id item_a item_b item_c
0 1 2 0 0
1 2 0 1 1
2 3 1 1 0
更新:
現在我在這裏,和「身份證」丟失,怎麼辦聚集呢?
lab = sklearn.preprocessing.LabelEncoder()
labels = lab.fit_transform(np.array(df.item))
enc = sklearn.preprocessing.OneHotEncoder()
dummy = enc.fit_transform(labels.reshape(-1,1))
dummy.todense()
matrix([[ 1., 0., 0.],
[ 1., 0., 0.],
[ 0., 0., 1.],
[ 0., 1., 0.],
[ 1., 0., 0.],
[ 0., 1., 0.]])
你可以做一個數據幀的類別爲您展示,然後使用as_matrix()方法來轉換成numpy的數組表示? –
@SteveMisuta是的,我可以那樣做。你能否詳細說明原因? – Chen
@Chen你有沒有想過這個想法? – Afflatus