具有多列的 Pandas v 0.25 groupby 会出现内存错误

mor*_*rty 2 pandas pandas-groupby

更新到 pandas v0.25.2 后,对大型数据帧上的许多列执行 groupby 的脚本不再有效。我收到内存错误

MemoryError: Unable to allocate array with shape (some huge number...,) and data type int64
Run Code Online (Sandbox Code Playgroud)

做了一些研究,我发现早期版本的 Git 报告了问题 (#14942)

import numpy as np
import pandas as pd

df = pd.DataFrame({
    'cat': np.random.randint(0, 255, size=3000000),
    'int_id': np.random.randint(0, 255, size=3000000),
    'other_id': np.random.randint(0, 10000, size=3000000),
    'foo': 0
}) 
df['cat'] = df.cat.astype(str).astype('category')

# killed after 6 minutes of 100% cpu and  90G maximum main memory usage
grouped = df.groupby(['cat', 'int_id', 'other_id']).count()
Run Code Online (Sandbox Code Playgroud)

运行此代码(在 0.25.2 版上)也会出现内存错误。我做错了什么(pandas v0.25 中的语法是否发生了变化?),或者是否返回了这个标记为已解决的问题?

Pau*_*eux 5

使用observed=True修复它,防止GROUPBY扩大因子变量的所有可能的组合:

df.groupby(index, observed=True)
Run Code Online (Sandbox Code Playgroud)

有一个相关的GitHub 问题PERF: groupby with many empty groups memory blowup