Gibt es eine Abfrage-Methode oder ähnliches für Pandas Series (pandas.Series.query ())?

8

Die Methode pandas.DataFrame.query() ist von großem Nutzen für das (vor / nach) -Filtern von Daten beim Laden oder Plotten. Es ist besonders praktisch für die Verkettung von Methoden.

Ich möchte oft dieselbe Logik auf eine pandas.Series anwenden, z. nachdem Sie eine Methode wie df.value_counts ausgeführt haben, die ein pandas.Series zurückgibt.

Beispiel

Nehmen wir an, es gibt eine riesige Tabelle mit den Spalten Player, Game, Points und ich möchte ein Histogramm der Spieler mit mehr als 14 mal 3 Punkten zeichnen. Zuerst muss ich die Punkte jedes Spielers ( groupby -> agg ) summieren, die eine Serie von ~ 1000 Spielern und ihre Gesamtpunkte zurückgeben. Wenn man die .query Logik anwendet, sieht das etwa so aus:

%Vor%

Die einzigen Lösungen, die ich finde, zwingen mich zu einer unnötigen Zuweisung und brechen die Methodenverkettung:

%Vor%

Sowohl die Verkettung von Methoden als auch die Abfragemethode helfen dabei, den Code leserlich zu halten, während die Filterung von Teilmengen sehr schnell unordentlich werden kann.

%Vor%

Bitte hilf mir aus meinem Dilemma! Danke

    
dmeu 21.10.2016, 08:11
quelle

2 Antworten

4

IIUC können Sie query("Points > 100") hinzufügen:

%Vor%

Eine andere Lösung ist Auswahl nach Callable :

%Vor%

Bearbeitete Antwort nach bearbeiteter Frage:

%Vor%     
jezrael 21.10.2016, 08:28
quelle
2

Warum konvertieren Sie nicht von Series zu Dataframe, führen Sie die Abfrage durch und konvertieren Sie sie dann zurück.

%Vor%

Hier wird .to_frame() in DataFrame konvertiert, während der nachgestellte ["Points"] in Serie konvertiert wird.

Die Methode .query() kann dann konsistent verwendet werden, unabhängig davon, ob das Pandas-Objekt eine oder mehrere Spalten hat.

    
Martin 15.11.2016 12:44
quelle