2016-05-30 8 views
0

私はpandas DataFrameを持っており、特定の値のセットがTrueである行を選択したいと思います。任意の条件数でpandas DataFrameから行を選択

df = DataFrame([[True, True, True], [True, False, True], [True, True, False]], index=['a', 'b', 'c'], columns=['val1', 'val2', 'other'])#, columns=['val1', 'other']) 

# example DataFrame: 

    val1 val2 other 
a True True True 
b True False True 
c True True False 

名前に文字列 'val'が含まれている列の値がTrueである行が必要です。この例のDataFrameの場合、これはカラム 'val1'と 'val2'の値が気になることを意味します。これまでのところは良い

cond = df['val1'] & df['val2'] 
df[cond] 

# gives me: 

    val1 val2 other 
a True True True 
c True True False 

:私は、これらの二つの列の特定の名前を知っていれば、この選択は簡単です。しかし、私の実際のユースケースでは、どれくらいの 'val'列があるのか​​、正確な名前は何か分かりません。

は、私が「ヴァル」の列の全てを取得する方法を知っている:

df.columns[df.columns.str.contains('val')] 

# gives me: 

Index([u'val1', u'val2'], dtype='object') 

しかし、どのように私はこれらを一緒に入れていますか?任意の長さの列名のリストが与えられた場合、どのようにこれらの列がTrue値を持つ行を取得するためにブール索引付けを使用できますか?

+0

あなたが投稿することができます希望の結果セット? – MaxU

答えて

1

使用.all(axis=1)docsを参照してください):イラスト用

df[df.loc[:, df.columns.str.contains('val')].all(axis=1)] 

サンプルデータ:

df = pd.DataFrame(data=np.random.choice([True, False], (5, 6)), columns=['val_{}'.format(i) for i in range(5)] + ['other']) 

    val_0 val_1 val_2 val_3 val_4 other 
0 True True True True True False 
1 False True True True False False 
2 False False True False True True 
3 True False False False True True 
4 False True True True False False 

df[df.loc[:, df.columns.str.contains('val')].all(1)] 

    val_0 val_1 val_2 val_3 val_4 other 
0 True True True True True False 
1
あなたは filter()all()機能を使用してそれを行うことができます

In [194]: df[df.filter(like='val').all(axis=1)] 
Out[194]: 
    val1 val2 other 
a True True True 
c True True False 
関連する問題