groupby在pandas中的稀疏矩阵:首先填充它们

问题描述 投票:1回答:2

我有一个pandas DataFrame df形状(1000000,3)如下:

id      cat       team
1       'cat1'    A
1       'cat2'    A
2       'cat3'    B
3       'cat1'    A
4       'cat3'    B
4       'cat1'    B

然后我对cat列进行了模仿,以便为机器学习分类做好准备。

df2 = pandas.get_dummies(df,columns=['cat'], sparse=True)

但是当我尝试做的时候:

df2.groupby(['id','team']).sum()

它被卡住了,计算永远不会结束。所以不要立即分组,我尝试:

df2 = df2.fillna(0)

但它不起作用,DataFrame仍然充满了NaN值。为什么fillna()函数不能填充我的DataFrame?换句话说,如何从get_dummies获得的pandas稀疏矩阵用0而不是NaN填充?

我也尝试过:

df2 = pandas.get_dummies(df,columns=['cat'], sparse=True).to_sparse(fill_value=0)

这一次,df2充满了0,但是当我尝试:

print df2.groupby(['id','sexe']).sum()

我明白了:

C:\Anaconda\lib\site-packages\pandas\core\groupby.pyc in loop(labels, shape)
   3545         for i in range(1, nlev):
   3546             stride //= shape[i]
-> 3547             out += labels[i] * stride
   3548 
   3549         if xnull: # exclude nulls
ValueError: operands could not be broadcast together with shapes (1205800,) (306994,) (1205800,) 

我的解决方案是:

df2 = pandas.DataFrame(np.nan_to_num(df2.as_matrix()))
df2.groupby(['id','sexe']).sum()

它有效,但它需要大量的内存。有人可以帮我找到更好的解决方案,或者至少可以理解为什么我不能轻易地用零填充稀疏矩阵?为什么不可能在稀疏矩阵上使用groupby()然后使用sum()

pandas fill sparse-matrix
2个回答
© www.soinside.com 2019 - 2024. All rights reserved.