es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Agrupa por varias columnas y ordena los valores generando un AttributeError: ‘DataFrameGroupBy’ objeto no tiene el atributo ‘sort_values’

Para el conjunto de datos de juguete a continuación, estoy tratando de agrupar por target_name y ordenar los valores por varias columnas: valid_mse, valid_r2_score usando: df.groupby('target_name').sort_values(by=['valid_mse', 'valid_r2_score'], ascending=[True, False])

  target_name  train_mse  valid_mse  train_r2_score  valid_r2_score
0         CPI   1.102079   1.842212        0.947458       -0.624665
1         CPI   1.301734   1.890085        0.928005       -0.777463
2         CPI   0.471222   1.078413        0.990599        0.311849
3         PPI   0.113998   0.135523        0.662532        0.262387
4         PPI   0.095434   0.176431        0.752242       -0.422994
5         PPI   0.097648   0.174544        0.744522       -0.203880

Pero genera un error: AttributeError: 'DataFrameGroupBy' object has no attribute 'sort_values'. También intenté ordenar una columna usando df.groupby('target_name').sort_values(by='valid_mse', ascending=True), pero genera el mismo error.

¿Alguien sabe cómo puedo resolver este problema correctamente? Gracias.

Datos en formato de diccionario:

{'target_name': {0: 'CPI', 1: 'CPI', 2: 'CPI', 3: 'PPI', 4: 'PPI', 5: 'PPI'},
 'train_mse': {0: 1.102079409,
  1: 1.301734392,
  2: 0.471221642,
  3: 0.11399796,
  4: 0.09543417,
  5: 0.097647639},
 'valid_mse': {0: 1.842212034,
  1: 1.890085418,
  2: 1.078413107,
  3: 0.135523283,
  4: 0.176431247,
  5: 0.174543796},
 'train_r2_score': {0: 0.947458162,
  1: 0.928005473,
  2: 0.990599137,
  3: 0.662532128,
  4: 0.752241595,
  5: 0.744522334},
 'valid_r2_score': {0: -0.624665246,
  1: -0.777462993,
  2: 0.311849214,
  3: 0.262387135,
  4: -0.422993602,
  5: -0.203880075}}

Enlace de referencia:

https://stackoverflow.com/questions/17141558/how-to-sort-a-dataframe-in-python-pandas-by-two-or-more-columns

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El problema con el código es que groupby() devuelve un objeto DataFrameGroupBy que no tiene el método sort_values(). En cambio, debes usar el método apply() y pasarle la función sort_values(). Aquí está el código corregido:

    df.groupby('target_name').apply(lambda x: x.sort_values(['valid_mse', 'valid_r2_score'], ascending=[True, False]))
    

    Esto agrupa el DataFrame por target_name y ordena los valores dentro de cada grupo basándose en valid_mse y valid_r2_score en orden ascendente y descendente, respectivamente.

    Alternativamente, si deseas ordenar el DataFrame por una sola columna, puedes usar sort_values() directamente en el DataFrame de esta manera:

    df = df.sort_values(by='valid_mse', ascending=True)
    

    Esto ordenará el DataFrame por valid_mse en orden ascendente.

Comments are closed.