Tengo un dataframe que se parece a:
Alice Eleonora Mike Helen 2 7 8 6 11 5 9 4 6 15 12 3 5 3 7 8
No quiero crear la nueva columna que contiene para cada fila el nombre de la columna con el valor máximo para la fila dada
Alice Eleonora Mike Helen _Max 2 7 8 6 Mike 11 5 9 4 Alice 6 15 12 3 Eleonora 5 3 7 8 Helen
Me imagino cómo obtener el valor máximo:
df['_Max']=df[['Alice', 'Eleonora', 'Mike', 'Helen']].max(axis=1)
pero, ¿cómo obtener el nombre de la columna con el valor máximo y escribirlo en _Max
en lugar del valor en sí?
Puede usar apply
con un lambda
para devolver el nombre de la columna, aquí comparamos el valor de la fila con el máximo, esto produce una máscara booleana que podemos usar para enmascarar las columnas:
In [229]: df['MAX'] = df.apply( lambda x: df.columns[x == x.max()][0], axis=1) df Out[229]: Alice Eleonora Mike Helen MAX 0 2 7 8 6 Mike 1 11 5 9 4 Alice 2 6 15 12 3 Eleonora 3 5 3 7 8 Helen
Aquí está la máscara booleana:
In [232]: df.apply( lambda x: x == x.max(), axis=1) Out[232]: Alice Eleonora Mike Helen 0 False False True False 1 True False False False 2 False True False False 3 False False False True