Heim  >  Artikel  >  Backend-Entwicklung  >  Pandas-Methode, um die Zeile mit dem Maximalwert in der Groupby-Gruppe abzurufen

Pandas-Methode, um die Zeile mit dem Maximalwert in der Groupby-Gruppe abzurufen

不言
不言Original
2018-04-20 13:38:464035Durchsuche

Das Folgende ist eine Pandas-Methode zum Abrufen der Zeile mit dem Maximalwert in einer Groupby-Gruppe. Sie hat einen guten Referenzwert und ich hoffe, dass sie für alle hilfreich ist. Werfen wir gemeinsam einen Blick darauf

Pandas-Methode zum Abrufen der Zeile mit dem Maximalwert in der Groupby-Gruppe

Zum Beispiel ist der folgende DataFrame gruppiert nach Mt und herausgenommen Die Zeile mit der größten Anzahl

import pandas as pd
df = pd.DataFrame({'Sp':['a','b','c','d','e','f'], 'Mt':['s1', 's1', 's2','s2','s2','s3'], 'Value':[1,2,3,4,5,6], 'Count':[3,2,5,10,10,6]})

df


tr>2 tr>

Count Mt Sp Value
0 3 s1 a 1
1 2 s1 b 2
2 5 s2 c 3
3 10 s2 d 4
4 10 s2 e 5
5 6 s3 f 6
Count Mt Sp Wert
0 3 s1 a td> 1 td>
1 2 s1 b
2 5 s2 c 3
3 10 s2 d 4
4 10 s2 e 5
5 6 s3 f 6

Methode 1: Filtern Sie die Zeilen mit der größten Anzahl in der Gruppe heraus

df.groupby('Mt').apply(lambda t: t[t.Count==t.Count.max()])


thehead>10s3


Count Mt Sp Value
Mt




s1 0 3 s1 a 1
s2 3 10 s2 d 4
4 10 s2 e 5
s3 5 6 s3 f 6

Anzahl Mt Sp Wert
Mt
s1 0 3 s1 a 1
s2 3 s2 d 4
4 10 s2 td> e 5
s3 5 6f 6

print df.groupby(['Mt'])['Count'].agg(max)

idx=df.groupby(['Mt'])['Count'].transform(max)
print idx
idx1 = idx == df['Count']
print idx1

df[idx1]
Methode 2: Verwenden Sie die Transformation, um den Index des ursprünglichen Datenrahmens zu erhalten, und filtern Sie dann die erforderlichen Zeilen heraus

Mt
s1 3
s2 10
s3 6
Name: Count, dtype: int64
0 3
1 3
2 10
3 10
4 10
5 6
dtype: int64
0 True
1 False
2 False
3 True
4 True
5 True
dtype: bool



Count Mt Sp Value
0 3 s1 a 1
3 10 s2 d 4
4 10 s2 e 5
5 6 s3 f 6

s2
Anzahl Mt Sp Wert
0 3 s1 a 1
3 10 td> s2 d 4
4 10e 5
5 th> 6 s3 f 6
A Das Problem bei den oben genannten Methoden besteht darin, dass die Werte in den Zeilen 3 und 4 alle den Maximalwert darstellen und daher mehrere Zeilen zurückgegeben werden. Was passiert, wenn nur eine Zeile zurückgegeben wird?

idx = df.groupby('Mt')['Count'].idxmax()
print idx
Methode 3: idmax (die alte Version von Pandas ist argmax)

df.iloc[idx]
Mt
s1 0
s2 3
s3 5
Name: Count, dtype: int64



Count Mt Sp Value
0 3 s1 a 1
3 10 s2 d 4
5 6 s3 f 6

df.iloc[df.groupby(['Mt']).apply(lambda x: x['Count'].idxmax())]

Anzahl Mt Sp Wert
0 3 s1 a 1
3 10 s2 d 4
5 6 s3 f 6


Count Mt Sp Value
0 3 s1 a 1
3 10 s2 d 4
5 6 s3 f 6

def using_apply(df):
 return (df.groupby('Mt').apply(lambda subf: subf['Value'][subf['Count'].idxmax()]))

def using_idxmax_loc(df):
 idx = df.groupby('Mt')['Count'].idxmax()
 return df.loc[idx, ['Mt', 'Value']]

print using_apply(df)

using_idxmax_loc(df)

Anzahl Mt Sp Wert
0 3 s1 a 1
3 10 s2 d 4
5 6 s3 f 6
Mt
s1 1
s2 4
s3 6
dtype: int64



Mt Value
0 s1 1
3 s2 4
5 s3 6

4
Mt Value
0 s1 1
3 s2
5 s3 6

df.sort('Count', ascending=False).groupby('Mt', as_index=False).first()
Methode 4: Zuerst sortieren, dann das erste aus jeder Gruppe nehmen



Mt Count Sp Value
0 s1 3 a 1
1 s2 10 d 4
2 s3 6 f 6

Anzahl

MtSp Wert
0 s1 3 a 1
1 s2 10 d 4
2 s3 6 f 6
Dann tritt das Problem erneut auf, wenn Sie es nicht entfernen möchten die Zeile mit dem Maximalwert. Was ist beispielsweise mit der Zeile, in der sich der Mittelwert befindet?

Die Idee ist immer noch ähnlich, es sind jedoch möglicherweise einige Änderungen an der spezifischen Schreibmethode erforderlich. Beispielsweise müssen Methoden 1 und 2 den Max-Algorithmus ändern und Methode 3 muss eine Methode implementieren, um den Index zurückzugeben. Wie auch immer, nach Groupby ist jede Gruppe ein Datenrahmen.

Verwandte Empfehlungen:

pandas+dataframe implementiert Zeilen- und Spaltenauswahl- und Slicing-Vorgänge

Erste Schritte mit der Python-Datenverarbeitung Bibliothekspandas

Das obige ist der detaillierte Inhalt vonPandas-Methode, um die Zeile mit dem Maximalwert in der Groupby-Gruppe abzurufen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn