Ich habe eine Serie wie diese, nachdem ich groupby ('name') ausgeführt und die Funktion mean () für eine andere Spalte verwendet habe
name
383 3.000000
663 1.000000
726 1.000000
737 9.000000
833 8.166667
Könnte mir bitte jemand zeigen, wie man die Zeilen mit 1.000000 Mittelwerten herausfiltert? Vielen Dank und ich schätze Ihre Hilfe sehr.
Antworten:
quelle
s
und dann zweimal im Ausdruck verwendet werden). Funktioniert allerdings nur ab Pandas 0.18.Ab der Pandas-Version 0.18+ kann das Filtern einer Serie auch wie folgt erfolgen
Kasse: http://pandas.pydata.org/pandas-docs/version/0.18.1/whatsnew.html#method-chaininng-improvements
quelle
Wie DACW hervorhob , gibt es Verbesserungen bei der Verkettung von Methoden in Pandas 0.18.1 bei der Methoden, die genau das tun, wonach Sie suchen.
Anstatt zu verwenden
.where
, können Sie Ihre Funktion entweder an den.loc
Indexer oder an den Serienindexer übergeben[]
und den Aufruf von.dropna
: vermeidenEin ähnliches Verhalten wird für die Klassen DataFrame und NDFrame unterstützt.
quelle
Ein schneller Weg, dies zu tun, besteht darin
numpy
, die zugrunde liegenden Arrays zu rekonstruieren . Siehe Timings unten.naives Timing
quelle
Eine andere Möglichkeit besteht darin, zuerst in einen DataFrame zu konvertieren und die Abfragemethode zu verwenden (vorausgesetzt, Sie haben numexpr installiert):
quelle
Wenn Sie eine verkettete Operation mögen, können Sie auch folgende
compress
Funktionen verwenden:quelle
In meinem Fall hatte ich eine Panda-Serie, in der die Werte Tupel von Zeichen sind :
Daher könnte ich die Indizierung verwenden, um die Serien zu filtern, aber um den Index zu erstellen, den ich brauchte
apply
. Mein Zustand ist "finde alle Tupel, die genau ein 'H' haben".Ich gebe zu, es ist nicht "verkettbar" ist (dh ich wiederhole es
series_of_tuples
zweimal; Sie müssen alle temporären Reihen in einer Variablen speichern, damit Sie apply (...) darauf aufrufen können).Es kann (nebenbei ) auch andere Methoden geben, die elementweise arbeiten können, um einen Booleschen Index zu erzeugen.
.apply(...)
Viele andere Antworten (einschließlich akzeptierter Antworten), die die verkettbaren Funktionen verwenden, wie:
.compress()
.where()
.loc[]
[]
Diese akzeptieren Callables (Lambdas), die auf die Serie angewendet werden , nicht auf die einzelnen Werte in diesen Serien!
Daher verhielt sich meine Tupelreihe seltsam, als ich versuchte, meine obige Bedingung / callable / lambda mit einer der verkettbaren Funktionen zu verwenden, wie
.loc[]
:Erzeugt den Fehler:
KeyError: 'Level H muss mit name (None) identisch sein'
Ich war sehr verwirrt, aber es scheint, die Series.count-
series_of_tuples.count(...)
Funktion zu verwenden , was ich nicht wollte.Ich gebe zu, dass eine alternative Datenstruktur besser sein könnte:
Dadurch wird eine Reihe von Zeichenfolgen erstellt (dh durch Verketten des Tupels; Zusammenfügen der Zeichen im Tupel zu einer einzelnen Zeichenfolge).
So kann ich dann die verkettbare verwenden
Series.str.count
quelle