2016-08-30 6 views
0

Ich versuche im Grunde, Basis-Suchmaschine zu erstellen, die Ergebnisse basierend auf einer analysierten Abfrage zurückgibt.Python-Wörterbuch-Iteration für Datenrahmen-Filterung mit mehreren Bedingungen

Ich habe ein Wörterbuch, das Benutzer auf analysiert Eingabe von ihrer Saite erzeugt auf Basis:

input = {“color”: [“black”], “make”: [“honda”], “type”: [“”]} 

ich dann versuche, dass die Eingabe zu verwenden, um eine Suche und Filter eines Datensatzes zu tun (was ich zur Zeit bin Speichern wie ein Pandas-Datenrahmen, also bitte beraten, wenn dies auch nicht optimal ist).

list(df.column.values) = make,type,color,mpg,year 

honda,coupe,red,32,2014 
bmw,suv,black,21,2012 
honda,suv,black,24,2015 
vw,sedan,black,31,2016 

Ich brauche über die gültigen Werte meines Eingangs Wörterbuch iterieren (beachten Sie, dass ‚Typ‘ keinen Wert haben) und Filter auf das, was der Benutzer eingegeben in, ‚Farbe‘ und ‚make‘) . Manchmal können sie den Typ einschließen und die Farbe usw. weglassen, so dass ich vielleicht nie einen Wert für jeden Schlüssel in meinem Wörterbuch habe;

Code Sudo:

for each valid value in my input dictionary: 
    filter df by appropriate_column=appropriate_value 

meine Eingabe Beispiel Gegeben, so würde ich meine df Filter auf nur Einträge, die ‚schwarze‘ und machte von ‚honda‘ waren.

+0

Bitte Beispiel Daten zur Verfügung stellen wir in dem Code, das heißt einen kleinen Datenrahmen mit wenigen Zeilen verwenden können. Auch, was hast du bisher versucht? Das Abfragen in Pandas ist ziemlich einfach, zumindest für die Werte einer einzelnen Spalte. Weißt du wie das schon geht? – Shovalt

+0

Ja, ich weiß bereits, wie man Pandas für eine bestimmte Spalte/mehrere Spalten filtert, aber es dynamisch jedes Mal für Bedingungen, die variieren könnten, ich bin mir nicht sicher. – chattrat423

Antwort

1

Let d Ihre dict sein, dann gilt:

cond = [df[k].apply(lambda k: k in v if v != [''] else True) for k, v in d.items()] 
cond_total = functools.reduce(lambda x, y: x & y, cond) 
print(df[cond_total]) 

Ausgang:

make type color mpg year 
2 honda suv black 24 2015