Обновление:
Панды df были созданы так:
df = pd.read_sql(query, engine)
encoded = pd.get_dummies(df, columns=['account'])
Создание dask df из этого df выглядит так:
df = dd.from_pandas(encoded, 50)
Выполнение операции с использованием dask не приводит к заметному прогрессу (проверка с помощью диагностики dask):
result = df.groupby('journal_entry').max().reset_index().compute()
Оригинал:
У меня есть большая панда с 2,7M строк и 4000 столбцов. Все столбцы, кроме четырех, относятся к типу dint uint8. Столбцы uint8 содержат только значения 1 или 0. Я пытаюсь выполнить эту операцию на df:
result = df.groupby('id').max().reset_index()
Как и ожидалось, эта операция немедленно возвращает ошибку памяти. Моя первоначальная мысль состоит в том, чтобы разделить df по горизонтали и вертикали. Однако это создает беспорядочную ситуацию, поскольку .max()
необходимо выполнять для всех столбцов uint8, а не только для пары столбцов. Кроме того, все еще очень медленно разбивать df как этот. На моей машине установлено 32 ГБ ОЗУ.
Какая стратегия может смягчить проблему с памятью?