2015-11-06 66 views
0

我有以下形式的數據幀:結合熊貓GROUP_BY和sklearn countVectorizer

ID col1 col2 col3 class 
1  0.35 "A" "x" 'class1' 
1  0.35 "B" "y" 'class1' 
1  0.35 "A" "x" 'class1' 
1  0.35 "A" "z" 'class1' 
2  0.48 "B" "u" 'class2' 
2  0.48 "A" "x" 'class2' 
3  0.14 "C" "v" 'class3' 

其中COL2和COL3的尺寸(總共以上7000)非常高。我必須對ID字段進行分類。所以在我的理解中,我需要對數據進行分組。如果我使用熊貓group_by並使用密集格式,則內存爆炸。所以我想知道將數據提供給分類器的最佳方式是什麼?無論如何,我可以根據col2和col3的計數對數據進行分組,同時保持col1的狀態並將輸出保存在稀疏矩陣中?

回答

1

如果我明白你在問什麼,我將通過分開groupby和功能選擇來完成此操作,以便groupby只是聚合字符串,而CountVectorizer應用於這些分組字符串。例如:

>>> grouped = df.groupby('ID').aggregate({'col1':'first', 
              'col2':'sum', 
              'col3':'sum'}) 
>>> grouped['all'] = grouped['col2'] + grouped['col3'] 
>>> print(grouped) 
    col3 col1 col2  all 
ID        
1 xyxz 0.35 ABAA ABAAxyxz 
2  ux 0.48 BA  BAux 
3  v 0.14  C  Cv 

>>> from sklearn.feature_extraction.text import CountVectorizer 
>>> features = CountVectorizer(analyzer='char').fit_transform(grouped['all']) 
>>> features.shape 
(3, 8) 

這應該適當地縮放到大量的列。如果你需要數字而不是字符,上面的解決方案只需要稍作修改。

+0

非常感謝您的回覆,這非常有幫助。無論如何,我可以將數字列(列1)也納入特徵中嗎? –

+0

我搜索了一下,並從scipy.sparse hstack做了伎倆。再次感謝您的幫助。 –