idxmax data column python pandas dataframe max

column - python dataframe max value



Encuentre el nombre de la columna que tiene el valor máximo para cada fila (3)

Tengo un DataFrame como este:

In [7]: frame.head() Out[7]: Communications and Search Business General Lifestyle 0 0.745763 0.050847 0.118644 0.084746 0 0.333333 0.000000 0.583333 0.083333 0 0.617021 0.042553 0.297872 0.042553 0 0.435897 0.000000 0.410256 0.153846 0 0.358974 0.076923 0.410256 0.153846

Aquí, quiero preguntar cómo obtener el nombre de la columna que tiene el valor máximo para cada fila, el resultado deseado es así:

In [7]: frame.head() Out[7]: Communications and Search Business General Lifestyle Max 0 0.745763 0.050847 0.118644 0.084746 Communications 0 0.333333 0.000000 0.583333 0.083333 Business 0 0.617021 0.042553 0.297872 0.042553 Communications 0 0.435897 0.000000 0.410256 0.153846 Communications 0 0.358974 0.076923 0.410256 0.153846 Business


Puede apply en el marco de datos y obtener argmax() de cada fila a través de axis=1

In [144]: df.apply(lambda x: x.argmax(), axis=1) Out[144]: 0 Communications 1 Business 2 Communications 3 Communications 4 Business dtype: object

Aquí hay un punto de referencia para comparar qué tan lento es el método de apply con idxmax() para len(df) ~ 20K

In [146]: %timeit df.apply(lambda x: x.argmax(), axis=1) 1 loops, best of 3: 479 ms per loop In [147]: %timeit df.idxmax(axis=1) 10 loops, best of 3: 47.3 ms per loop


Puede usar idxmax con axis=1 para encontrar la columna con el mayor valor en cada fila:

>>> df.idxmax(axis=1) 0 Communications 1 Business 2 Communications 3 Communications 4 Business dtype: object

Para crear la nueva columna ''Max'', use df[''Max''] = df.idxmax(axis=1) .

Para encontrar el índice de fila en el que se produce el valor máximo en cada columna, use df.idxmax() (o de manera equivalente df.idxmax(axis=0) ).


Y si desea producir una columna que contenga el nombre de la columna con el valor máximo pero considerando solo un subconjunto de columnas, entonces use una variación de la respuesta de @ ajcr:

df[''Max''] = df[[''Communications'',''Business'']].idxmax(axis=1)