Um einen Datenrahmen (df) nach einer einzelnen Spalte zu filtern, können wir, wenn wir Daten mit Männern und Frauen berücksichtigen, Folgendes tun:
males = df[df[Gender]=='Male']
Frage 1 - Aber was ist, wenn sich die Daten über mehrere Jahre erstrecken und ich für 2014 nur Männer sehen wollte?
In anderen Sprachen könnte ich so etwas tun:
if A = "Male" and if B = "2014" then
(außer ich möchte dies tun und eine Teilmenge des ursprünglichen Datenrahmens in einem neuen Datenrahmenobjekt abrufen)
Frage 2. Wie mache ich das in einer Schleife und erstelle ein Datenrahmenobjekt für jeden eindeutigen Satz von Jahr und Geschlecht (dh ein df für: 2013-männlich, 2013-weiblich, 2014-männlich und 2014-weiblich
for y in year:
for g in gender:
df = .....
groupby
.Antworten:
Mit
&
Operator, vergessen Sie nicht mit den Sub-Anweisungen zu wickeln()
:So speichern Sie Ihre Datenrahmen in
dict
einer for-Schleife:BEARBEITEN:
Eine Demo für Ihre
getDF
:quelle
key
in deinemgetDF
? ein einzelner Parameter oder ein Tupel von Schlüsseln? sei genau plz;)Gender
undYear
beide Zeichenfolgen sein sollten, dh'Gender'
und'Year'
.Für allgemeinere boolesche Funktionen, die Sie als Filter verwenden möchten und die von mehr als einer Spalte abhängen, können Sie Folgendes verwenden:
Dabei ist f eine Funktion, die auf jedes Elementpaar (x1, x2) von col_1 und col_2 angewendet wird und je nach gewünschter Bedingung (x1, x2) True oder False zurückgibt.
quelle
Ab Pandas 0.13 ist dies der effizienteste Weg.
quelle
Falls sich jemand fragt, was der schnellere Weg zum Filtern ist (die akzeptierte Antwort oder die von @redreamality):
Ergebnisse für 100.000 Zeilen:
Ergebnisse für 10.000.000 Zeilen:
Die Ergebnisse hängen also von der Größe und den Daten ab. Auf meinem Laptop
query()
wird nach 500k Zeilen schneller. Außerdem hat die ZeichenfolgensucheYear=="2014"
einen unnötigen Overhead (Year==2014
ist schneller).quelle
Sie können eigene Filter - Funktion erstellen
query
inpandas
. Hier haben Sie die Filterung derdf
Ergebnisse nach allenkwargs
Parametern. Vergessen Sie nicht, einige Validatoren (kwargs
Filterung) hinzuzufügen , um die Filterfunktion für sich selbst zu erhaltendf
.quelle
Sie können nach mehreren Spalten (mehr als zwei) filtern, indem Sie den
np.logical_and
Operator zum Ersetzen&
(odernp.logical_or
zum Ersetzen|
) verwenden.Hier ist eine Beispielfunktion, die den Job ausführt, wenn Sie Zielwerte für mehrere Felder angeben. Sie können es für verschiedene Arten der Filterung anpassen und so weiter:
Verwendung:
quelle