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
| 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 | tr>
---|
0 | 3 | s1 | a td> | 1 td> |
---|
1 | 2 | s1 | b | < td>2< /tr>
---|
2 | 5 | s2 | c | 3 |
3 | 10 | s2 | d | 4 |
---|
4 | 10 | s2 | e | 5 | tr>
5 | 6 | s3 | f | 6 |
< /tbody>
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()])
Nach dem Login kopieren
|
| 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 | | | | | |
thehead>s1 | 0 | 3 | s1 | a | 1 |
---|
s2 | 3 | < td>10 s2 | d | 4 |
---|
4 | 10 | s2 td> | e | 5 |
---|
s3 | 5 | 6 | < td>s3f | 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]
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
| Count | Mt | Sp | Value |
---|
0 | 3 | s1 | a | 1 |
---|
3 | 10 | s2 | d | 4 |
---|
4 | 10 | s2 | e | 5 |
---|
5 | 6 | s3 | f | 6 |
---|
| Anzahl | Mt | Sp | Wert |
0 | 3 | s1 | a | 1 |
---|
3 | 10 td> | s2 | d | 4 |
4 | 10 | < td>s2e | 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
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
| 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())]
Nach dem Login kopieren
| Anzahl | Mt | Sp | Wert |
0 | 3 | s1 | a | 1 |
---|
3 | 10 | s2 | d | 4 |
5< /th> | 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)
Nach dem Login kopieren
| Anzahl | Mt | Sp | Wert |
0 | 3 | s1 | a | 1 |
---|
3 | 10 | s2 | d | 4 |
5< /th> | 6 | s3 | f | 6 |
---|
Mt
s1 1
s2 4
s3 6
dtype: int64
Nach dem Login kopieren
< thead> | Mt | Value |
< tr> 0 | s1 | 1 | 3 | s2 | < td> 4
---|
5 | s3 | 6 |
---|
df.sort('Count', ascending=False).groupby('Mt', 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 |
|
Mt | AnzahlSp |
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!