Antworten:
Angenommen, es df
gibt einen eindeutigen Index, ergibt dies die Zeile mit dem Maximalwert:
In [34]: df.loc[df['Value'].idxmax()]
Out[34]:
Country US
Place Kansas
Value 894
Name: 7
Beachten Sie, dass idxmax
Renditen Index Etiketten . Wenn der DataFrame also Duplikate im Index enthält, kann die Beschriftung die Zeile möglicherweise nicht eindeutig identifizierendf.loc
möglicherweise mehr als eine Zeile zurückgegeben wird.
Wenn Sie df
keinen eindeutigen Index haben, müssen Sie den Index daher eindeutig machen, bevor Sie wie oben beschrieben vorgehen. Abhängig vom DataFrame können Sie den Index manchmal verwenden stack
oder set_index
eindeutig machen. Sie können den Index auch einfach zurücksetzen (sodass die Zeilen ab 0 neu nummeriert werden):
df = df.reset_index()
df[df['Value']==df['Value'].max()]
Dies gibt die gesamte Zeile mit dem Maximalwert zurück
Das Land und der Ort sind der Index der Serie. Wenn Sie den Index nicht benötigen, können Sie Folgendes festlegen as_index=False
:
df.groupby(['country','place'], as_index=False)['value'].max()
Bearbeiten:
Es scheint, dass Sie den Ort mit dem maximalen Wert für jedes Land wollen. Der folgende Code macht das, was Sie wollen:
df.groupby("country").apply(lambda df:df.irow(df.value.argmax()))
Ich denke, der einfachste Weg, eine Zeile mit dem Maximalwert zurückzugeben, besteht darin, ihren Index abzurufen. argmax()
kann verwendet werden, um den Index der Zeile mit dem größten Wert zurückzugeben.
index = df.Value.argmax()
Jetzt kann der Index verwendet werden, um die Funktionen für diese bestimmte Zeile abzurufen:
df.iloc[df.Value.argmax(), 0:2]
Verwenden Sie das index
Attribut von DataFrame
. Beachten Sie, dass ich nicht alle Zeilen im Beispiel eingebe.
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')
Sie können den Wert auch über diesen Index abrufen:
In [21]: for index in df.index:
print index, df[index]
....:
('Spain', 'Manchester') 512
('UK', 'London') 778
('US', 'Mchigan') 854
('US', 'NewYork') 562
Entschuldigen Sie das Missverständnis, was Sie wollen. Versuchen Sie Folgendes:
In [52]: s=data.max()
In [53]: print '%s, %s, %s' % (s['Country'], s['Place'], s['Value'])
US, NewYork, 854
Verwenden Sie die folgende Codezeile, um Land und Ort mit maximalem Wert zu drucken.
print(df[['Country', 'Place']][df.Value == df.Value.max()])
Meine Lösung zum Finden von Maximalwerten in Spalten:
df.ix[df.idxmax()]
, auch Minimum:
df.ix[df.idxmin()]
Sie können verwenden:
print (df [df ['Wert'] == df ['Wert']. max ()])
Beim Importieren von Daten mit Pandas ist ein ähnlicher Fehler aufgetreten. Die erste Spalte in meinem Datensatz enthielt Leerzeichen vor dem Wortanfang. Ich habe die Leerzeichen entfernt und es hat wie ein Zauber funktioniert !!