Nombre de la columna, que contiene el valor máximo.

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