Pandas Groupby - 稀疏矩阵错误

时间:2015-07-08 19:21:09

标签: python pandas group-by

这个问题与我之前提到的关于使用pandas get_dummies()函数的问题有关(链接如下)。

Pandas Get_dummies for nested tables

然而,在使用解决方案的过程中,在回答中我注意到在查看groupby函数时的奇怪行为。问题是,当矩阵以稀疏格式表示时,数据帧的重复(非唯一)索引值似乎会导致错误,同时按照密集矩阵的预期工作。

我有极高的维度数据,因此出于内存原因需要稀疏矩阵。下面是错误的一个例子。如果有人有解决方法,将非常感谢

工作:

import pandas as pd
df = pd.DataFrame({'Instance':[1,1,2,3],'Cat_col':        
['John','Smith','Jane','Doe']})
result= pd.get_dummies(df.Cat_col, prefix='Name')
result['Instance'] = df.Instance
result = result.set_index('Instance')
result = result.groupby(level=0).apply(max) 

失败

import pandas as pd
df = pd.DataFrame({'Instance':[1,1,2,3],'Cat_col':   
['John','Smith','Jane','Doe']})
result= pd.get_dummies(df.Cat_col, prefix='Name',sparse=True)
result['Instance'] = df.Instance
result = result.set_index('Instance')
result = result.groupby(level=0).apply(max)

请注意,您需要16.1或更高版本的pandas。

提前谢谢

1 个答案:

答案 0 :(得分:0)

您可以采用不同的方式执行您的群组作为变通方法。不要将Instance设置为索引并使用groupby的列并删除Instance列(本例中的最后一列,因为它刚刚添加)。 Groupby将创建一个实例索引。

import pandas as pd
df = pd.DataFrame({'Instance':[1,1,2,3],'Cat_col':   
['John','Smith','Jane','Doe']})
result= pd.get_dummies(df.Cat_col, prefix='Name',sparse=True)
result['Instance'] = df.Instance
#WORKAROUND:
result=result.groupby('Instance').apply(max)[result.columns[:-1]]

result
Out[58]: 
          Name_Doe  Name_Jane  Name_John  Name_Smith
Instance                                            
1                0          0          1           1
2                0          1          0           0
3                1          0          0           0

注意:稀疏数据帧将您的Instance int存储为dataframe列中BlockIndex中的浮点数。为了使索引与第一个示例完全相同,您需要从float更改为int。

result.index=result.index.map(int)
result.index.name='Instance'
相关问题