这个问题与我之前提到的关于使用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。
提前谢谢
答案 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'