2016-05-12 15 views
2

Gerade jetzt, wähle ich mehrere Zeilen, in denen bestimmte Spalten haben einen besonderen Wert auf diese Weise:Pandas: Auswahl mehrerer Spalten programmatisch

df.loc[(df['col1'] == val1) & (df['col2'] == val2)] 

Gibt es eine Weise, die ich dies programmatisch tun kann, stelle ich die Spalte Schlüssel/Wert als Diktat? Etwas wie das:

def get_df(cols) 

    df.loc[ (df[k] == v) for k,v in cols.items() ] 

Aber ich bin nicht sicher, wie man 'UND' die Ausdrücke. Irgendwelche Ideen?

Antwort

3

Sie können eine Serie aus dem Wörterbuch erstellen und machen den Vergleich:

import numpy as np 
import pandas as pd 
np.random.seed(0) 

df = pd.DataFrame(np.random.randint(0, 5, (100, 3)), columns = list("ABC")) 
cols = {"A": 0, "B": 3, "C": 3} 

df[(df == pd.Series(cols)).all(axis=1)] 
Out: 
    A B C 
94 0 3 3 

Oder verwenden np.logical_and mit reduce:

df[np.logical_and.reduce([(df[k] == v) for k,v in cols.items()])] 

    A B C 
94 0 3 3 
Verwandte Themen