我有一个格式为的数据框:
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字段进行分类。所以在我的理解中,我需要对数据进行分组。如果我使用pandas group_by并使用密集格式,则内存会爆炸。所以我想知道将数据输入分类器的最佳方法是什么?无论如何,我可以根据col2和col3的计数对数据进行分组,同时保持col1不变并将输出放在稀疏矩阵中?
答案 0 :(得分: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)
这应适当缩放到大量列。如果你需要计算单词而不是字符,上面的解决方案只需要稍作修改。