Pandas分类列执行GroupBy内存占用过高的原因与解决方法咨询
现象原因
Pandas 对 Categorical 类型列执行分组时默认observed=False,会返回两个列所有分类取值的笛卡尔积全量组合,原数据中不存在的组合会被补0,导致结果行数大幅增加:你给出的示例中col1、col2各有6个分类值,笛卡尔积共生成36行结果,远多于普通数值列分组得到的6行,这是内存占用升高的核心原因。同时分组结果的Categorical列默认保留原列全量分类元数据,也会比同等长度的数值列占用更多内存。
解决方法
groupby时指定observed=True参数,即可仅返回数据中实际存在的分类组合,表现和普通数值列分组完全一致:
count2 = df2[columns].groupby(columns, observed=True).size().reset_index(name='count')
调整后得到的count2行数、内存占用都会和普通列分组的count1完全相同。
内容的提问来源于stack exchange,提问作者KimSunJoon
相关产品推荐
相关产品推荐

