Heim >Backend-Entwicklung >Python-Tutorial >Wie kann ich die Top-N-Datensätze innerhalb von Gruppen in einem Pandas-DataFrame 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!