2016-05-12 2 views
2

Сейчас я выбрать несколько строк, где некоторые столбцы имеют конкретное значение таким образом:Панды: выбор нескольких столбцов программно

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

Есть ли способ, что я могу сделать это программно, я обеспечиваю ключевой столбец/значение как диктовать? Что-то вроде этого:

def get_df(cols) 

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

Но я не уверен, как «И» выражения. Есть идеи?

ответ

3

Вы можете создать серию из словаря и сделать сравнение:

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 

Или используйте np.logical_and с reduce:

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

    A B C 
94 0 3 3 
Смежные вопросы