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

不言
Freigeben: 2023-03-24 14:34:02
Original
4101 Leute haben es durchsucht

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
Nach dem Login kopieren


< td>2< /tr>< /tbody>

CountMtSpValue
03s1a1
12s1b2
25s2c3
310s2d4
410s2e5
56s3f6
CountMtSpWert
03s1a1
12s1b
25s2c3
310s2d4
410s2e5
56s3f6

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

df.groupby(&#39;Mt&#39;).apply(lambda t: t[t.Count==t.Count.max()])
Nach dem Login kopieren


< td>10< td>s3


CountMtSpValue
Mt




s103s1a1
s2310s2d4
410s2e5
s356s3f6

AnzahlMtSpWert
Mt

s103s1 a1
s23 s2d4
410 s2e5
s356f6

print df.groupby([&#39;Mt&#39;])[&#39;Count&#39;].agg(max)

idx=df.groupby([&#39;Mt&#39;])[&#39;Count&#39;].transform(max)
print idx
idx1 = idx == df[&#39;Count&#39;]
print idx1

df[idx1]
Nach dem Login kopieren
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
Nach dem Login kopieren



CountMtSpValue
03s1a1
310s2d4
410s2e5
56s3f6

< td>s2
AnzahlMtSpWert
0 3s1a1
310s2d4
410e5
56s3 f6
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(&#39;Mt&#39;)[&#39;Count&#39;].idxmax()
print idx
Nach dem Login kopieren
Methode 3: idmax (die alte Version von Pandas ist argmax)

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



CountMtSpValue
03s1a1
310s2d4
56s3f6

df.iloc[df.groupby([&#39;Mt&#39;]).apply(lambda x: x[&#39;Count&#39;].idxmax())]
Nach dem Login kopieren

AnzahlMtSpWert
03s1a1
310s2d4
5< /th>6s3f6


CountMtSpValue
03s1a1
310s2d4
56s3f6

def using_apply(df):
 return (df.groupby(&#39;Mt&#39;).apply(lambda subf: subf[&#39;Value&#39;][subf[&#39;Count&#39;].idxmax()]))

def using_idxmax_loc(df):
 idx = df.groupby(&#39;Mt&#39;)[&#39;Count&#39;].idxmax()
 return df.loc[idx, [&#39;Mt&#39;, &#39;Value&#39;]]

print using_apply(df)

using_idxmax_loc(df)
Nach dem Login kopieren

AnzahlMtSpWert
03s1a1
310s2d4
5< /th>6s3f6

Mt
s1 1
s2 4
s3 6
dtype: int64
Nach dem Login kopieren



MtValue
0s11
3s24
5s36

< thead>< tr> < td> 4

MtValue
0s11
3s2
5s36

df.sort(&#39;Count&#39;, ascending=False).groupby(&#39;Mt&#39;, as_index=False).first()
Nach dem Login kopieren
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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage