it-swarm.com.de

Ermitteln Sie den maximalen Wert einer Spalte und geben Sie die entsprechenden Zeilenwerte mit Pandas zurück

Structure of data;

Verwenden von Python-Pandas Ich versuche, "Land" und "Ort" mit dem maximalen Wert zu finden.

Dies gibt den Maximalwert zurück:

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

Aber wie bekomme ich den entsprechenden Namen 'Land' und 'Ort'?

62
richie

Angenommen, df hat 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 den Index labels zurückgibt. Wenn der DataFrame also Duplikate im Index hat, identifiziert die Beschriftung die Zeile möglicherweise nicht eindeutig, sodass df.loc möglicherweise mehr als eine Zeile zurückgibt.

Wenn df keinen eindeutigen Index hat, müssen Sie den Index daher eindeutig machen, bevor Sie wie oben beschrieben vorgehen. Je nach DataFrame können Sie manchmal stack oder set_index verwenden, um den Index eindeutig zu machen. Oder Sie können den Index einfach zurücksetzen (damit die Zeilen ab 0 neu nummeriert werden):

df = df.reset_index()
100
unutbu
df[df['Value']==df['Value'].max()]

Dadurch wird die gesamte Zeile mit dem maximalen Wert zurückgegeben

22
Gaurav

Land und Ort sind der Index der Serie. Wenn Sie den Index nicht benötigen, können Sie as_index=False einstellen:

df.groupby(['country','place'], as_index=False)['value'].max()

Bearbeiten:

Es scheint, dass Sie einen Platz mit maximalem Wert für jedes Land haben möchten. Der folgende Code wird das tun, was Sie wollen:

df.groupby("country").apply(lambda df:df.irow(df.value.argmax()))
8
HYRY

Verwenden Sie das index-Attribut von DataFrame. Beachten Sie, dass ich im Beispiel nicht alle Zeilen 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

Entschuldigung für Missverständnisse, 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
5
waitingkuo

Ich denke, der einfachste Weg, um eine Zeile mit dem maximalen Wert zurückzugeben, ist das Abrufen des Index. argmax() kann verwendet werden, um den Index der Zeile mit dem größten Wert zurückzugeben.

index = df.Value.argmax()

Nun kann der Index verwendet werden, um die Features für diese bestimmte Zeile abzurufen:

df.iloc[df.Value.argmax(), 0:2]
4
sharad kakran

Importieren Sie das Pandas Module

Definieren Sie Ihr DataFrame-Objekt, beispielsweise df , und lesen Sie die Datei.

Um Land und Ort mit maximalem Wert zu drucken, verwenden Sie die folgende Codezeile.

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

Ich würde empfehlen, nlargest für eine bessere Leistung und kürzeren Code zu verwenden. pandas importieren

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

Meine Lösung zum Ermitteln von Maximalwerten in Spalten:

df.ix[df.idxmax()]

, auch Minimum:

df.ix[df.idxmin()]
0
Marcin Lentner