Respuestas:
Suponiendo que df
tiene un índice único, esto da la fila con 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 etiquetas de índice . Entonces, si el DataFrame tiene duplicados en el índice, es posible que la etiqueta no identifique de manera ú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 proceder 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á la fila completa 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()))
Creo que la forma más fácil de devolver una fila con el valor máximo es obteniendo 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]
Utilice el index
atributo 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
Perdón por malinterpretar lo que quieres, prueba lo siguiente:
In [52]: s=data.max()
In [53]: print '%s, %s, %s' % (s['Country'], s['Place'], s['Value'])
US, NewYork, 854
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()])
Mi solución para encontrar valores máximos en columnas:
df.ix[df.idxmax()]
, también mínimo:
df.ix[df.idxmin()]
Puedes usar:
print (df [df ['Valor'] == df ['Valor']. max ()])
Encontré un error similar al intentar importar datos usando pandas. La primera columna de mi conjunto de datos tenía espacios antes del comienzo de las palabras. Quité los espacios y funcionó de maravilla !!