Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

409
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda