Suchen Sie den Maximalwert einer Spalte und geben Sie die entsprechenden Zeilenwerte mit Pandas zurück

117

Struktur der Daten;

Mit Python Pandas versuche ich das Country& Placemit dem Maximalwert zu finden .

Dies gibt den Maximalwert zurück:

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

Aber wie bekomme ich den entsprechenden Countryund PlaceNamen?

Richie
quelle

Antworten:

170

Angenommen, es dfgibt 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 idxmaxRenditen 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 dfkeinen 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 stackoder set_indexeindeutig machen. Sie können den Index auch einfach zurücksetzen (sodass die Zeilen ab 0 neu nummeriert werden):

df = df.reset_index()
unutbu
quelle
Danke dir. Genau das habe ich gesucht.
Richie
56
df[df['Value']==df['Value'].max()]

Dies gibt die gesamte Zeile mit dem Maximalwert zurück

Gaurav
quelle
Erläuterung: - Der innere Ausdruck führt eine boolesche Prüfung über die gesamte Länge des Datenrahmens durch. Der Index, der die rechte Seite des Ausdrucks erfüllt (.max ()), gibt den Index zurück, der wiederum die vollständige Zeile dieses Datenrahmens
Penta
10

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()))
HYRY
quelle
das würde nur die Spaltennamen und die dtypes zurückgeben
richie
8

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]
Sharad Kakran
quelle
7

Verwenden Sie das indexAttribut 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

Bearbeiten

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
Wartenkuo
quelle
richtig. Aber ich suche nach einer einzeiligen Ausgabe mit der
Aufschrift
Vielen Dank. Dies würde das Problem für den aktuellen Datensatz lösen, in dem nur eine Spalte mit Werten vorhanden ist. Wenn es mehr Spalten mit Werten gibt, funktioniert die Lösung von @ unutbu besser. Danke trotzdem.
Richie
5

Verwenden Sie die folgende Codezeile, um Land und Ort mit maximalem Wert zu drucken.

print(df[['Country', 'Place']][df.Value == df.Value.max()])
Arpit Sharma
quelle
2

Meine Lösung zum Finden von Maximalwerten in Spalten:

df.ix[df.idxmax()]

, auch Minimum:

df.ix[df.idxmin()]
Marcin Lentner
quelle
2

Ich würde empfehlen, nlargestfür eine bessere Leistung und kürzeren Code zu verwenden. importierenpandas

df[col_name].value_counts().nlargest(n=1)
saran3h
quelle
2

Sie können verwenden:

print (df [df ['Wert'] == df ['Wert']. max ()])

Kelvinkahuro
quelle
2

pandas importieren
df ist der von Ihnen erstellte Datenrahmen.

Verwenden Sie den Befehl:

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

Dies zeigt das Land und den Ort an, dessen Wert maximal ist.

Raksha
quelle
0

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 !!

Jefferson Sankara
quelle