Heim >Backend-Entwicklung >Python-Tutorial >Wie kann ich die Top-N-Datensätze innerhalb von Gruppen in einem Pandas-DataFrame effizient abrufen?

Wie kann ich die Top-N-Datensätze innerhalb von Gruppen in einem Pandas-DataFrame effizient abrufen?

Barbara Streisand
Barbara StreisandOriginal
2024-12-05 13:24:12980Durchsuche

How Can I Efficiently Retrieve the Top N Records Within Groups in a Pandas DataFrame?

Pandas: Top-Datensätze innerhalb von Gruppen effizient abrufen

Stellen Sie sich die Aufgabe vor, die beiden obersten Datensätze innerhalb jedes einzelnen Werts einer bestimmten Spalte in einem Pandas-DataFrame abzurufen. Betrachten Sie als Beispiel den folgenden DataFrame:

df = pd.DataFrame({'id':[1,1,1,2,2,2,2,3,4], 'value':[1,2,3,1,2,3,4,1,1]})

Traditionell können Sie dieses Problem lösen, indem Sie Datensätze innerhalb jeder Gruppe nummerieren, nachdem Sie sie nach der gewünschten Spalte gruppiert haben:

dfN = df.groupby('id').apply(lambda x:x['value'].reset_index()).reset_index()

Allerdings a Ein effizienterer und eleganterer Ansatz besteht darin, die Kopffunktion von Pandas zu nutzen:

df.groupby('id').head(2)

Dadurch werden die beiden obersten Datensätze für jede Gruppe direkt zurückgegeben, ohne dass eine zusätzliche Spalte erforderlich ist Nummerierung.

       id  value
id             
1  0   1      1
   1   1      2 
2  3   2      1
   4   2      2
3  7   3      1
4  8   4      1

So entfernen Sie den MultiIndex und reduzieren die Ergebnisse:

df.groupby('id').head(2).reset_index(drop=True)
    id  value
0   1      1
1   1      2
2   2      1
3   2      2
4   3      1
5   4      1

Das obige ist der detaillierte Inhalt vonWie kann ich die Top-N-Datensätze innerhalb von Gruppen in einem Pandas-DataFrame effizient abrufen?. 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