Respostas:
Supondo que df
tenha um índice exclusivo, isso dá a linha com o valor máximo:
In [34]: df.loc[df['Value'].idxmax()]
Out[34]:
Country US
Place Kansas
Value 894
Name: 7
Observe que idxmax
retorna rótulos de índice . Portanto, se o DataFrame tiver duplicatas no índice, o rótulo pode não identificar exclusivamente a linha, portanto, df.loc
pode retornar mais de uma linha.
Portanto, se df
não tiver um índice exclusivo, você deve torná-lo exclusivo antes de prosseguir como acima. Dependendo do DataFrame, às vezes você pode usar stack
ou set_index
para tornar o índice exclusivo. Ou você pode simplesmente redefinir o índice (para que as linhas sejam renumeradas, começando em 0):
df = df.reset_index()
df[df['Value']==df['Value'].max()]
Isso retornará a linha inteira com o valor máximo
O país e o local são o índice da série, se você não precisa do índice, pode definir as_index=False
:
df.groupby(['country','place'], as_index=False)['value'].max()
Editar:
Parece que você quer o lugar com valor máximo para cada país, o código a seguir fará o que você quiser:
df.groupby("country").apply(lambda df:df.irow(df.value.argmax()))
Acho que a maneira mais fácil de retornar uma linha com o valor máximo é obtendo seu índice. argmax()
pode ser usado para retornar o índice da linha com o maior valor.
index = df.Value.argmax()
Agora, o índice pode ser usado para obter os recursos para essa linha específica:
df.iloc[df.Value.argmax(), 0:2]
Use o index
atributo de DataFrame
. Observe que não digito todas as linhas do exemplo.
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')
Você também pode obter o valor por esse índice:
In [21]: for index in df.index:
print index, df[index]
....:
('Spain', 'Manchester') 512
('UK', 'London') 778
('US', 'Mchigan') 854
('US', 'NewYork') 562
Desculpe por não entender o que você quer, tente o seguinte:
In [52]: s=data.max()
In [53]: print '%s, %s, %s' % (s['Country'], s['Place'], s['Value'])
US, NewYork, 854
Para imprimir o país e o local com valor máximo, use a seguinte linha de código.
print(df[['Country', 'Place']][df.Value == df.Value.max()])
Minha solução para encontrar valores máximos em colunas:
df.ix[df.idxmax()]
, também mínimo:
df.ix[df.idxmin()]
Você pode usar:
print (df [df ['Value'] == df ['Value']. max ()])
Encontrei um erro semelhante ao tentar importar dados usando o pandas. A primeira coluna do meu conjunto de dados tinha espaços antes do início das palavras. Retirei os espaços e funcionou perfeitamente !!