Pandas: Top-Datensätze innerhalb jeder Gruppe effizient extrahieren
Das Abrufen der Top-Datensätze innerhalb jeder Gruppe eines DataFrame ist eine häufige Aufgabe bei der Datenbearbeitung . In diesem Artikel werden mehrere Ansätze zur Erreichung dieses Ziels vorgestellt, einschließlich einer von SQL-Fensterfunktionen inspirierten Lösung.
Problemstellung:
Gegeben ist ein DataFrame mit einer Gruppierungsspalte und einer Wertespalte Ich möchte die ersten n Datensätze für jede Gruppe extrahieren.
Naiver Ansatz mit Gruppierung und Zeilennummerierung:
Eins Eine Möglichkeit, dieses Problem anzugehen, besteht darin, eine Gruppierungsoperation anzuwenden, gefolgt von einem fensterfunktionsähnlichen Ansatz. Dazu gehört das Hinzufügen einer Zeilennummer zu jedem Datensatz innerhalb jeder Gruppe und das anschließende Filtern nach den obersten Zeilen basierend auf dieser Zeilennummer.
Praktische Lösung:
Eine effizientere Lösung besteht in der Verwendung von head()-Methode für den gruppierten DataFrame. Standardmäßig gibt head() die ersten n Datensätze in jeder Gruppe zurück. Dies passt gut zum Ziel, die Top-Datensätze zu erhalten.
MultiIndex entfernen:
Um den durch die Gruppierungsoperation eingeführten MultiIndex zu entfernen, verwenden wir reset_index(drop=True):
Ausgabe:
Eleganter Ansatz für die Zeilennummerierung:
Während Python die Funktion row_number() fehlt von SQL können wir seine Funktionalität mithilfe einer Kombination aus groupby() und cumcount() replizieren. So geht's:
Dieser Ansatz weist innerhalb jeder Gruppe eine eindeutige Zeilennummer zu, ohne zusätzliche Spalten oder Mehrfachindizes einzuführen.
Das obige ist der detaillierte Inhalt vonWie kann ich die Top-N-Datensätze aus jeder Gruppe in einem Pandas-DataFrame effizient extrahieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!