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.

pandas dataframe: extraer datos con criterios/condiciones específicas mínimo en una columna fijando las demás columnas.

Antes que nada, muchas gracias por tu ayuda.
Tengo una tabla que importo con pandas como df. Para cada combinación única de foo&bar quiero obtener un nuevo df con el valor mínimo de zoo y su correspondiente qux. Intenté simplificar mi dataframe, pero en realidad tengo cientos de qux y foo y varias docenas de bar.

mi tabla de entrada :

foo bar zoo qux
aaa HB1 9.75 lab1
aaa HB1 4.87 lab2
aaa HB1 3.05 lab3
aaa TS3 8.51 lab1
aaa TS3 2.58 lab2
aaa TS3 2.48 lab3
bbb HB1 9.03 lab1
bbb HB1 6.11 lab2
bbb HB1 7.66 lab3
bbb TS3 3.57 lab1
bbb TS3 4.25 lab2
bbb TS3 1.63 lab3

mi resultado esperado :

foo bar zoo qux
aaa HB1 3.05 lab3
aaa TS3 2.48 lab3
bbb HB1 6.11 lab2
bbb TS3 1.63 lab3

Intenté usar groupby o pivot_table, obtuve el valor mínimo de zoo para cada bar y cada foo, pero no obtuve el qux correspondiente y el df estaba completamente modificado y no se parecía al formato original. Estoy un poco perdido.

Muchas gracias de antemano por tu ayuda.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Estimado,

    Gracias por contactarnos. Basándonos en la tabla de entrada proporcionada, puedes utilizar pandas-groupby para obtener el resultado deseado. Aquí tienes el código que puedes utilizar:

    df.groupby(['foo', 'bar']).apply(lambda x: x.loc[x['zoo'].idxmin()])
    

    Este código agrupa el dataframe por ‘foo’ y ‘bar’, luego aplica una función lambda a cada grupo. La función lambda selecciona la fila con el valor mínimo de ‘zoo’ para ese grupo y devuelve esa fila.

    Esto te dará el resultado en el formato esperado, con el valor correspondiente de ‘qux’ para cada valor mínimo de ‘zoo’.

    Espero que esto sea de ayuda. Avísame si tienes alguna pregunta adicional.

    Saludos cordiales.

Comments are closed.