web-dev-qa-db-fra.com

Sélection de colonnes avec condition sur Pandas DataFrame

J'ai une trame de données qui ressemble à ceci.

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

J'essaie de filtrer toutes les lignes qui ont something1 soit le col1 ou col2. Si j'ai juste besoin de la logique de condition sur une colonne, je peux le faire avec df[df.col1 == 'something1'] mais y aurait-il un moyen de le faire avec plusieurs colonnes?

9
user3368526

Vous pouvez utiliser all avec boolean 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

ÉDITER:

Si besoin, sélectionnez uniquement certaines colonnes que vous pouvez utiliser isin avec boolean indexing pour sélectionner columns, puis utiliser 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

Pourquoi pas:

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

les sorties:

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

Pour appliquer une condition à l'ensemble de la trame de données

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