【发布时间】:2020-03-16 17:01:55
【问题描述】:
我试图理解为什么 panda 的分类特征的 groupby 占用太多 RAM,因此需要太多时间来执行。 考虑以下数据框:
import pandas as pd
from numpy.random import randint, randn
from pandas.api.types import CategoricalDtype
df = pd.DataFrame({'cat_1':randint(0,60,300000),
'cat_2':randint(0,40,300000),
'cat_3':randint(0,70,300000),
'cat_4':randint(0,30,300000),
'value':randn(300000)})
所有的cat_1, ..., cat_4 都是 int64 并且列 value 是浮点数。我可以使用 groupby 命令轻松计算列 value 的平均值,如下所示:
df.groupby(['cat_1', 'cat_2', 'cat_3', 'cat_4']).agg({'value':'mean'}).reset_index()
如果我现在将 int64 列转换为类别,然后重复以下相同的计算:
for col in ['cat_1', 'cat_2', 'cat_3', 'cat_4']:
df[col] = df[col].astype('category')
df.groupby(['cat_1', 'cat_2', 'cat_3', 'cat_4']).agg({'value':'mean'}).reset_index()
我使用 pandas==0.25.3 和 Python 3.7.4。
谁能帮我处理这个案子?
【问题讨论】:
标签: python-3.x pandas pandas-groupby