2016-05-12 5 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() ] 

しかし、どのように表現を 'AND'するのか分かりません。何か案は?

答えて

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 

あるいは、reducenp.logical_andを使用します。

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

    A B C 
94 0 3 3 
関連する問題