Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

408
Vistas
Obtenga todas las claves del objeto GroupBy en Pandas

Estoy buscando una manera de obtener una lista de todas las claves en un objeto GroupBy, pero parece que no puedo encontrar una a través de los documentos ni a través de Google.

Definitivamente hay una forma de acceder a los grupos a través de sus claves, así:

 df_gb = df.groupby(['EmployeeNumber']) df_gb.get_group(key)

... así que imagino que hay una forma de acceder a una lista (o similar) de las claves en un objeto GroupBy. Estoy buscando algo como esto:

 df_gb.keys Out: [1234, 2356, 6894, 9492]

Me imagino que podría recorrer el objeto GroupBy y obtener las claves de esa manera, pero creo que tiene que haber una mejor manera.

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Puede acceder a esto a través del atributo .groups en el objeto groupby , esto devuelve un dict, las claves del dict le dan los grupos:

 In [40]: df = pd.DataFrame({'group':[0,1,1,1,2,2,3,3,3], 'val':np.arange(9)}) gp = df.groupby('group') gp.groups.keys() Out[40]: dict_keys([0, 1, 2, 3])

Aquí está la salida de los groups :

 In [41]: gp.groups Out[41]: {0: Int64Index([0], dtype='int64'), 1: Int64Index([1, 2, 3], dtype='int64'), 2: Int64Index([4, 5], dtype='int64'), 3: Int64Index([6, 7, 8], dtype='int64')}

Actualizar

parece que debido a que el tipo de groups es un dict , entonces el orden del grupo no se mantiene cuando llamas a las keys :

 In [65]: df = pd.DataFrame({'group':list('bgaaabxeb'), 'val':np.arange(9)}) gp = df.groupby('group') gp.groups.keys() Out[65]: dict_keys(['b', 'e', 'g', 'a', 'x'])

si llamas a groups puedes ver que se mantiene el orden:

 In [79]: gp.groups Out[79]: {'a': Int64Index([2, 3, 4], dtype='int64'), 'b': Int64Index([0, 5, 8], dtype='int64'), 'e': Int64Index([7], dtype='int64'), 'g': Int64Index([1], dtype='int64'), 'x': Int64Index([6], dtype='int64')}

luego se mantiene el orden de las claves, un truco alrededor de esto es acceder al atributo .name de cada grupo:

 In [78]: gp.apply(lambda x: x.name) Out[78]: group aa bb ee gg xx dtype: object

lo cual no es bueno ya que esto no está vectorizado, sin embargo, si ya tiene un objeto agregado, puede obtener los valores del índice:

 In [81]: agg = gp.sum() agg Out[81]: val group a 9 b 13 e 7 g 1 x 6 In [83]: agg.index.get_level_values(0) Out[83]: Index(['a', 'b', 'e', 'g', 'x'], dtype='object', name='group')
over 4 years ago · Santiago Trujillo Denunciar

0

Un problema con la respuesta de EdChum es que obtener claves al iniciar gp.groups.keys() primero construye el diccionario de grupo completo. En marcos de datos grandes, esta es una operación muy lenta, que efectivamente duplica el consumo de memoria. Iterar es mucho más rápido:

 df = pd.DataFrame({'group':list('bgaaabxeb'), 'val':np.arange(9)}) gp = df.groupby('group') keys = [key for key, _ in gp]

Ejecutar esta comprensión de lista me tomó 16 s en mi objeto groupby, mientras que tuve que interrumpir gp.groups.keys() después de 3 minutos.

over 4 years ago · Santiago Trujillo Denunciar

0

Utilice la opción sort=False para reservar el orden de las claves de grupo gp = df.groupby('group', sort=False)

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda