¿Cómo puedo encontrar la fila para la que el valor de una columna específica es máximo ?
df.max()
me dará el valor máximo para cada columna, no sé cómo obtener la fila correspondiente.
Usa la idxmax
función pandas . Es sencillo:
>>> import pandas
>>> import numpy as np
>>> df = pandas.DataFrame(np.random.randn(5,3),columns=['A','B','C'])
>>> df
A B C
0 1.232853 -1.979459 -0.573626
1 0.140767 0.394940 1.068890
2 0.742023 1.343977 -0.579745
3 2.125299 -0.649328 -0.211692
4 -0.187253 1.908618 -1.862934
>>> df['A'].argmax()
3
>>> df['B'].argmax()
4
>>> df['C'].argmax()
1
Alternativamente, también puede usar numpy.argmax
, como numpy.argmax(df['A'])
: proporciona lo mismo y aparece al menos tan rápido como idxmax
en observaciones superficiales.
idxmax()
devuelve etiquetas de índices, no números enteros.
Index
, debe obtenerla manualmente (lo que puede ser complicado ahora que se permiten etiquetas de fila duplicadas).NOTAS HISTORICAS:
idxmax()
solía llamarse argmax()
antes de 0.11argmax
fue obsoleto antes de 1.0.0 y eliminado por completo en 1.0.0argmax
solía existir y realizar la misma función (aunque parecía funcionar más lentamente que idxmax
).
argmax
La función devolvió la posición entera dentro del índice de la ubicación de fila del elemento máximo.Por ejemplo, considere este juguete DataFrame
con una etiqueta de fila duplicada:
In [19]: dfrm
Out[19]:
A B C
a 0.143693 0.653810 0.586007
b 0.623582 0.312903 0.919076
c 0.165438 0.889809 0.000967
d 0.308245 0.787776 0.571195
e 0.870068 0.935626 0.606911
f 0.037602 0.855193 0.728495
g 0.605366 0.338105 0.696460
h 0.000000 0.090814 0.963927
i 0.688343 0.188468 0.352213
i 0.879000 0.105039 0.900260
In [20]: dfrm['A'].idxmax()
Out[20]: 'i'
In [21]: dfrm.iloc[dfrm['A'].idxmax()] # .ix instead of .iloc in older versions of pandas
Out[21]:
A B C
i 0.688343 0.188468 0.352213
i 0.879000 0.105039 0.900260
Así que aquí un uso ingenuo de idxmax
no es suficiente, mientras que la forma antigua de argmax
proporcionaría correctamente la ubicación posicional de la fila máxima (en este caso, la posición 9).
Este es exactamente uno de esos tipos desagradables de comportamientos propensos a errores en los lenguajes tipados dinámicamente que hace que este tipo de cosas sea tan desafortunado y que valga la pena derrotar a un caballo muerto. Si está escribiendo código de sistemas y su sistema de repente se usa en algunos conjuntos de datos que no se limpian adecuadamente antes de unirse, es muy fácil terminar con etiquetas de fila duplicadas, especialmente etiquetas de cadena como un identificador CUSIP o SEDOL para activos financieros. No puede usar fácilmente el sistema de tipos para ayudarlo, y es posible que no pueda imponer la exclusividad en el índice sin encontrarse con datos que faltan inesperadamente.
Así que te queda la esperanza de que tus pruebas unitarias cubran todo (no lo hicieron, o más probablemente nadie escribió ninguna prueba); de lo contrario (lo más probable) te quedas esperando para ver si te encuentras con esto. error en tiempo de ejecución, en cuyo caso probablemente tenga que dejar caer muchas horas de trabajo de la base de datos a la que estaba generando resultados, golpearse la cabeza contra la pared en IPython tratando de reproducir manualmente el problema, finalmente descubriendo que es porque soloidxmax
puede informa la etiqueta de la fila máxima y luego te decepciona que ninguna función estándar obtenga automáticamente las posiciones de la fila máxima para ti, escribe una implementación con errores, edita el código y reza para que no te encuentres con el problema nuevamente.
Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.
En caso de infracción, por favor [email protected] Eliminar
Déjame decir algunas palabras