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.
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:
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.