Pandas groupby con categorías con nan redundantes

Tengo problemas para usarpandas groupby con datos categóricos Teóricamente, debería ser súper eficiente: está agrupando e indexando a través de enteros en lugar de cadenas. Pero insiste en que, al agrupar por múltiples categorías,cada combinación de categorías debe tenerse en cuenta.

A veces uso categorías incluso cuando hay una baja densidad de cadenas comunes, simplemente porque esas cadenas son largas y ahorra memoria / mejora el rendimiento. A veces hay miles de categorías en cada columna. Al agrupar por 3 columnas,pandas nos obliga a mantener resultados para 1000 ^ 3 grupos.

Mi pregunta: ¿hay una manera conveniente de usargroupby con categorías mientras se evita este comportamiento desagradable? No estoy buscando ninguna de estas soluciones:

Recreando toda la funcionalidad a través denumpy.Conversión continua a cadenas / códigos antesgroupby, volviendo a las categorías más tarde.Hacer una columna de tupla a partir de columnas de grupo, luego agrupar por la columna de tupla.

Espero que haya una manera de modificar solo este particularpandas idiosincrasia. Un ejemplo simple está abajo. En lugar de 4 categorías que quiero en la salida, termino con 12.

import pandas as pd

group_cols = ['Group1', 'Group2', 'Group3']

df = pd.DataFrame([['A', 'B', 'C', 54.34],
                   ['A', 'B', 'D', 61.34],
                   ['B', 'A', 'C', 514.5],
                   ['B', 'A', 'A', 765.4],
                   ['A', 'B', 'D', 765.4]],
                  columns=(group_cols+['Value']))

for col in group_cols:
    df[col] = df[col].astype('category')

df.groupby(group_cols, as_index=False).sum()

Group1  Group2  Group3  Value
#   A   A   A   NaN
#   A   A   C   NaN
#   A   A   D   NaN
#   A   B   A   NaN
#   A   B   C   54.34
#   A   B   D   826.74
#   B   A   A   765.40
#   B   A   C   514.50
#   B   A   D   NaN
#   B   B   A   NaN
#   B   B   C   NaN
#   B   B   D   NaN

Actualización de recompensa

El equipo de desarrollo de pandas aborda mal el problema (cfgithub.com/pandas-dev/pandas/issues/17594) Por lo tanto, estoy buscando respuestas que aborden cualquiera de los siguientes:

¿Por qué, con referencia al código fuente de los pandas, los datos categóricos se tratan de manera diferente en las operaciones grupales?¿Por qué se preferiría la implementación actual? Aprecio que esto sea subjetivo, pero estoy luchando por encontrar alguna respuesta a esta pregunta. El comportamiento actual es prohibitivo en muchas situaciones sin soluciones engorrosas y potencialmente costosas.¿Existe una solución limpia para anular el tratamiento de pandas de datos categóricos en operaciones grupales? Tenga en cuenta las 3 rutas prohibidas (desplegable a numpy; conversiones a / desde códigos; creación y agrupación por columnas de tuplas). Preferiría una solución que sea "compatible con pandas" para minimizar / evitar la pérdida de la funcionalidad categórica de otros pandas.Una respuesta del equipo de desarrollo de pandas para apoyar y aclarar el tratamiento existente. Además, ¿por qué considerar todas las combinaciones de categorías no es configurable como un parámetro booleano?

Bounty update # 2

Para ser claros, no espero respuestas a todas las 4 preguntas anteriores. La pregunta principal que hago es si es posible o aconsejable sobrescribirpandas métodos de biblioteca para que las categorías se traten de una manera que facilitegroupby / set_index operaciones

Respuestas a la pregunta(5)

Su respuesta a la pregunta