【问题标题】:Pandas Groupby - Sparse Matrix ErrorPandas Groupby - 稀疏矩阵错误
【发布时间】:2015-07-09 06:03:05
【问题描述】:

这个问题与我之前提出的关于使用 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。

提前谢谢你

【问题讨论】:

  • 如果将最后一行更改为result = result.groupby(level=0).apply(sum),则失败的示例有效

标签: python pandas group-by


【解决方案1】:

您可以以不同的方式执行 groupby 作为解决方法。不要将 Instance 设置为索引并使用您的 groupby 列并删除 Instance 列(在这种情况下是最后一列,因为它刚刚添加)。 Groupby 将创建一个 Instance 索引。

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 存储为数据框列中 BlockIndex 中的浮点数。为了使索引与第一个示例完全相同,您需要从 float 更改为 int。

result.index=result.index.map(int)
result.index.name='Instance'

【讨论】:

    猜你喜欢
    • 2018-01-19
    • 2018-08-17
    • 1970-01-01
    • 2014-05-14
    • 1970-01-01
    • 2013-07-23
    • 2017-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多