web-dev-qa-db-ja.com

Pandas DataFrameの条件で列を選択する

このようなデータフレームがあります。

    col1    col2
0   something1  something1
1   something2  something3
2   something1  something1
3   something2  something3
4   something1  something2  

something1またはcol1col2が含まれるすべての行をフィルタリングしようとしています。列の条件ロジックだけが必要な場合は、df[df.col1 == 'something1']で実行できますが、複数の列で実行する方法はありますか?

9
user3368526

allboolean indexing

print ((df == 'something1').all(1))
0     True
1    False
2     True
3    False
4    False
dtype: bool

print (df[(df == 'something1').all(1)])
         col1        col2
0  something1  something1
2  something1  something1

編集:

一部の列のみを選択する必要がある場合は、 isinboolean indexing 目的のcolumnsを選択し、subset-df[cols]

print (df)
         col1        col2 col3
0  something1  something1    a
1  something2  something3    s
2  something1  something1    r
3  something2  something3    a
4  something1  something2    a

cols = df.columns[df.columns.isin(['col1','col2'])]
print (cols)
Index(['col1', 'col2'], dtype='object')

print (df[(df[cols] == 'something1').all(1)])
         col1        col2 col3
0  something1  something1    a
2  something1  something1    r
6
jezrael

何故なの:

df[(df.col1 == 'something1') | (df.col2 == 'something1')]

出力:

    col1    col2
0   something1  something1
2   something1  something1
4   something1  something2
4
Naomi Fridman

データフレーム全体に1つの条件を適用するには

df[(df == 'something1').any(axis=1)]
0
Sincole Brans