Encuentre el valor máximo de una columna y devuelva los valores de fila correspondientes usando Pandas

Estructura de los datos;

Utilizando Python Pandas estoy tratando de encontrar ‘País’ y ‘Lugar’ con el valor máximo.

Esto devuelve el valor máximo:

data.groupby(['Country','Place'])['Value'].max() 

Pero, ¿cómo obtengo el nombre ‘País’ y ‘Lugar’ correspondientes?

Suponiendo que df tiene un índice único, esto le da a la fila el valor máximo:

 In [34]: df.loc[df['Value'].idxmax()] Out[34]: Country US Place Kansas Value 894 Name: 7 

Tenga en cuenta que idxmax devuelve las tags de índice. Por lo tanto, si el DataFrame tiene duplicados en el índice, la etiqueta puede no identificar de forma única la fila, por lo que df.loc puede devolver más de una fila.

Por lo tanto, si df no tiene un índice único, debe hacer que el índice sea único antes de continuar como se indicó anteriormente. Dependiendo del dataframe, a veces puede usar stack o set_index para hacer que el índice sea único. O, simplemente puede restablecer el índice (para que las filas se vuelvan a numerar, comenzando en 0):

 df = df.reset_index() 
 df[df['Value']==df['Value'].max()] 

Esto devolverá toda la fila con el valor máximo

El país y el lugar es el índice de la serie; si no necesita el índice, puede establecer as_index=False :

 df.groupby(['country','place'], as_index=False)['value'].max() 

Editar:

Parece que desea el lugar con el valor máximo para cada país; el siguiente código hará lo que desee:

 df.groupby("country").apply(lambda df:df.irow(df.value.argmax())) 

Utilice el atributo de index de DataFrame . Tenga en cuenta que no escribo todas las filas en el ejemplo.

 In [14]: df = data.groupby(['Country','Place'])['Value'].max() In [15]: df.index Out[15]: MultiIndex [Spain Manchester, UK London , US Mchigan , NewYork ] In [16]: df.index[0] Out[16]: ('Spain', 'Manchester') In [17]: df.index[1] Out[17]: ('UK', 'London') 

También puede obtener el valor por ese índice:

 In [21]: for index in df.index: print index, df[index] ....: ('Spain', 'Manchester') 512 ('UK', 'London') 778 ('US', 'Mchigan') 854 ('US', 'NewYork') 562 

Editar

Disculpe por malinterpretar lo que quiere, pruebe lo siguiente:

 In [52]: s=data.max() In [53]: print '%s, %s, %s' % (s['Country'], s['Place'], s['Value']) US, NewYork, 854 

Importar el módulo de pandas

Defina su objeto DataFrame, diga df , y lea el archivo.

Para imprimir el País y el Lugar con el valor máximo, use la siguiente línea de código.

  print(df[['Country', 'Place']][df.Value == df.Value.max()]) 

Creo que la forma más fácil de devolver una fila con el valor máximo es obtener su índice. argmax() se puede utilizar para devolver el índice de la fila con el valor más grande.

 index = df.Value.argmax() 

Ahora el índice podría usarse para obtener las características de esa fila en particular:

 df.iloc[df.Value.argmax(), 0:2] 

Mi solución para encontrar valores máximos en columnas:

 df.ix[df.idxmax()] 

, también mínimo:

 df.ix[df.idxmin()]