Come filtrare pandas dataframe utilizzando colonne booleane


È possibile utilizzare i seguenti metodi per filtrare le righe in un DataFrame panda in base ai valori booleani delle colonne:

Metodo 1: filtra DataFrame in base a una colonna booleana

 #filter for rows where value in 'my_column' is True
df. loc [df. my_column ]

Metodo 2: filtra DataFrame in base a più colonne booleane

 #filter for rows where value in 'column1' or 'column2' is True
df. loc [df. column1 | df. column2 ]

I seguenti esempi mostrano come utilizzare ciascun metodo nella pratica con i seguenti DataFrame panda:

 import pandas as pd

#createDataFrame
df = pd. DataFrame ({' team ': ['A', 'B', 'C', 'D', 'E', 'F', 'G'],
                   ' points ': [18,20, 25, 40, 34, 32, 19],
                   ' all_star ': [True, False, True, True, True, False, False],
                   ' starter ': [False, True, True, True, False, False, False]})

#view DataFrame
print (df)

  team points all_star starter
0 A 18 True False
1 B 20 False True
2 C 25 True True
3 D 40 True True
4 E 34 True False
5 F 32 False False
6 G 19 False False

Esempio 1: filtra il DataFrame in base a una colonna booleana

Possiamo utilizzare la seguente sintassi per filtrare il DataFrame panda in modo che contenga solo righe in cui il valore nella colonna all_star è True:

 #filter for rows where 'all_star' is True
df. loc [df. all_star ]

	team points all_star starter
0 A 18 True False
2 C 25 True True
3 D 40 True True
4 E 34 True False

Tieni presente che DataFrame è stato filtrato per contenere solo righe il cui valore nella colonna all_star è True.

Se invece vuoi filtrare le righe in cui all_star è False, digita semplicemente una tilde ( ~ ) davanti al nome della colonna:

 #filter for rows where 'all_star' is False
df. loc [ ~ df. all_star ]

        team points all_star starter
1 B 20 False True
5 F 32 False False
6 G 19 False False

Il DataFrame è stato ora filtrato per contenere solo righe il cui valore nella colonna all_star è False.

Esempio 2: filtra il DataFrame in base a più colonne booleane

Possiamo utilizzare la seguente sintassi per filtrare il DataFrame panda in modo che contenga solo righe in cui il valore della colonna all_star o della colonna iniziale è True:

 #filter for rows where 'all_star' or 'starter' is True
df. loc [df. all_star | df. starter ]

        team points all_star starter
0 A 18 True False
1 B 20 False True
2 C 25 True True
3 D 40 True True
4 E 34 True False

Tieni presente che DataFrame è stato filtrato per contenere solo righe il cui valore nella colonna all_star o starter è True.

Se desideri filtrare le righe il cui valore nelle colonne all_star e starter è True, puoi utilizzare l’operatore & invece di | operatore:

 #filter for rows where 'all_star' and 'starter' is True
df. loc [df. all_star & df. starter ]

	team points all_star starter
2 C 25 True True
3 D 40 True True

Ora il DataFrame è stato filtrato per contenere solo le righe in cui il valore nelle colonne all_star e starter è True.

Correlati: la differenza tra loc e iloc su Pandas

Risorse addizionali

I seguenti tutorial spiegano come eseguire altre attività comuni nei panda:

Panda: seleziona le righe da DataFrame utilizzando una serie booleana
Panda: come creare una colonna booleana basata sulla condizione
Panda: come convertire valori booleani in valori interi

Aggiungi un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *