Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

405
Views
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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!