2016-08-16 2 views
-3

Ich habe eine, die ich zu der folgenden Situation vereinfachen kann, in der ich einen Datenrahmen einführe, mache ich eine Auswahl in einer Schleife und mache einen neuen Datenrahmen, der die Teilmenge der enthält alte, die die Bedingungen erfüllen:Python pandas Auswahl von Zeilen auf unbekannter Anzahl von Parametern

import pandas as pd 
import intertools 
g = ['M', 'M', 'F', 'F'] 
a = [20, 33, 20, 50] 
Zip = [21202, 21018, 21202, 22222] 
d = [0, -3, 8] 

parameters = (g, a) 
names = ['gender', 'age'] 

df = pd.DataFrame({'age':a, 'gender':g, 'd':d, 'Zip':Zip}) 

for values in itertools.product(*parameters): 
    thesevalues = ((df[names[0]] == values[0]) & (df[names[1]] == values[1]])) 
    subdf = df[thesevalues] 

funktioniert ganz gut, aber was ist, wenn ich die Postleitzahlen in den Parametern, mit den Namen auch enthalten sein sollen. Ich müsste auch manuell ein drittes Auswahlkriterium in "thesevalues" einführen. Ich übersehe wahrscheinlich die Funktionalität, um diese Liste von Parametern, die ich in diesem Kriterium haben möchte, an die Liste der Parameter anzupassen? Eine Schleife scheint eine schlechte Option zu sein ... Gibt es einen anderen Weg? Vielen Dank!

+0

Ihren Code nicht wirklich Sinn macht, da Sie Subset ... alle Datenrahmen auf alle Kombinationen von Iterieren ... –

+0

Ihr Code funktioniert nicht. – ayhan

+0

Ja, der Code funktioniert und das ist nur ein kleines Beispiel als Beispiel, in Wirklichkeit werden viele Zeilen mit einer Kombination von Parametern ausgewählt und ich muss dann eine Spalte addieren, die nicht Teil der Auswahl ist. – Marcel

Antwort

0

IIUC Sie benötigen numpy.logical_and:

parameters = (g, a, Zip) 
names = ['gender', 'age', 'Zip'] 

df = pd.DataFrame({'age':a, 'gender':g, 'd':d, 'Zip':Zip}) 
print (df) 

for values in product(*parameters): 
    #http://stackoverflow.com/a/20528566/2901002 
    thesevalues = np.logical_and.reduce([df[names[x]] == values[x] for x in range(len(parameters))]) 
    subdf = df[thesevalues] 
    print (subdf) 
Verwandte Themen