Risposte:
Supponendo che df
abbia un indice univoco, questo fornisce la riga con il valore massimo:
In [34]: df.loc[df['Value'].idxmax()]
Out[34]:
Country US
Place Kansas
Value 894
Name: 7
Nota che idxmax
restituisce le etichette dell'indice . Quindi, se il DataFrame ha duplicati nell'indice, l'etichetta potrebbe non identificare in modo univoco la riga, quindidf.loc
potrebbe restituire più di una riga.
Pertanto, se df
non si dispone di un indice univoco, è necessario rendere unico l'indice prima di procedere come sopra. A seconda del DataFrame, a volte puoi usarestack
o set_index
per rendere univoco l'indice. Oppure puoi semplicemente reimpostare l'indice (in modo che le righe vengano rinumerate, a partire da 0):
df = df.reset_index()
df[df['Value']==df['Value'].max()]
Ciò restituirà l'intera riga con il valore massimo
Il paese e il luogo sono l'indice della serie, se non ti serve l'indice puoi impostare as_index=False
:
df.groupby(['country','place'], as_index=False)['value'].max()
Modificare:
Sembra che tu voglia il luogo con il valore massimo per ogni paese, il seguente codice farà quello che vuoi:
df.groupby("country").apply(lambda df:df.irow(df.value.argmax()))
Penso che il modo più semplice per restituire una riga con il valore massimo sia ottenere il suo indice. argmax()
può essere utilizzato per restituire l'indice della riga con il valore più grande.
index = df.Value.argmax()
Ora l'indice potrebbe essere utilizzato per ottenere le funzionalità per quella particolare riga:
df.iloc[df.Value.argmax(), 0:2]
Usa l' index
attributo di DataFrame
. Nota che non digito tutte le righe nell'esempio.
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')
Puoi anche ottenere il valore da quell'indice:
In [21]: for index in df.index:
print index, df[index]
....:
('Spain', 'Manchester') 512
('UK', 'London') 778
('US', 'Mchigan') 854
('US', 'NewYork') 562
Ci scusiamo per aver capito male quello che vuoi, prova quanto segue:
In [52]: s=data.max()
In [53]: print '%s, %s, %s' % (s['Country'], s['Place'], s['Value'])
US, NewYork, 854
Per stampare il Paese e la località con il valore massimo, utilizzare la seguente riga di codice.
print(df[['Country', 'Place']][df.Value == df.Value.max()])
La mia soluzione per trovare i valori massimi nelle colonne:
df.ix[df.idxmax()]
, anche minimo:
df.ix[df.idxmin()]
Puoi usare:
stampare (df [df [ 'Valore'] == df [ 'Valore']. max ()])
Ho riscontrato un errore simile durante il tentativo di importare i dati utilizzando i panda, la prima colonna del mio set di dati aveva spazi prima dell'inizio delle parole. Ho tolto gli spazi e ha funzionato a meraviglia !!