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?

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()

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


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()))

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]

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

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()])

2

Meine Lösung zum Finden von Maximalwerten in Spalten:

df.ix[df.idxmax()]

, auch Minimum:

df.ix[df.idxmin()]

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)


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.


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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.