Como filtrar o pandas dataframe usando colunas booleanas


Você pode usar os seguintes métodos para filtrar linhas em um DataFrame do pandas com base em valores de colunas booleanas:

Método 1: Filtre o DataFrame com base em uma coluna booleana

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

Método 2: Filtrar o DataFrame com base em múltiplas colunas booleanas

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

Os exemplos a seguir mostram como usar cada método na prática com o seguinte DataFrame do pandas:

 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

Exemplo 1: Filtre o DataFrame com base em uma coluna booleana

Podemos usar a seguinte sintaxe para filtrar o DataFrame do pandas para conter apenas linhas onde o valor na coluna 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

Observe que o DataFrame foi filtrado para conter apenas linhas cujo valor na coluna all_star seja True.

Se você quiser filtrar linhas onde all_star é False, simplesmente digite um til ( ~ ) na frente do nome da coluna:

 #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

O DataFrame agora foi filtrado para conter apenas linhas cujo valor na coluna all_star é False.

Exemplo 2: Filtrar o DataFrame com base em múltiplas colunas booleanas

Podemos usar a seguinte sintaxe para filtrar o DataFrame do pandas para conter apenas linhas onde o valor da coluna all_star ou da coluna inicial é 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

Observe que o DataFrame foi filtrado para conter apenas linhas cujo valor na coluna all_star ou inicial é True.

Se quiser filtrar linhas cujo valor nas colunas all_star e starter é True, você pode usar o operador & em vez de | operador:

 #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

Agora o DataFrame foi filtrado para conter apenas linhas onde o valor nas colunas all_star e starter é True.

Relacionado: A diferença entre loc e iloc no Pandas

Recursos adicionais

Os tutoriais a seguir explicam como realizar outras tarefas comuns em pandas:

Pandas: selecione linhas do DataFrame usando uma série booleana
Pandas: como criar uma coluna booleana com base na condição
Pandas: Como converter valores booleanos em valores inteiros

Add a Comment

O seu endereço de email não será publicado. Campos obrigatórios marcados com *