Olá, Paulo! Tudo bem com você?
Vi aqui que a dúvida já foi solucionada, mas resolvi deixar minha contribuição ao tópico.
O método do .isin() nos retorna um DataFrame de booleanos, ou seja de Trues e Falses, que nos diz se os valores passados para dentro do método estão no seu DataFrame ou não, conforme a documentação.
Quando essa você esse trecho de código:
[i for i in range(11) if i % 2 == 0]
Saída:
[0, 2, 4, 6, 8, 10]
Você está realizando um list comprehension que é uma maneira mais fácil de criar listas em python sem escrever toda a sintaxe de um laço for
. Como resultado você obtém apenas os números pares de 0 a 10.
Quando você realiza o seguinte trecho de código:
selecao = df['N'].isin([i for i in range(11) if i % 2 == 0])
selecao
Saída:
| N |
---|
A | True |
B | False |
C | True |
D | False |
E | True |
F | False |
G | True |
H | False |
I | True |
J | False |
K | True |
É retornado um DataFrame booleano as linhas que do seu DataFrame, que é o df, em que os valores ([0, 2, 4, 6, 8, 10]) passados para o método .isin(). Para comparar vamos olhar nosso DataFrame df:
Percebe que as linhas onde possui os valores [0, 2, 4, 6, 8, 10] estão como True e as que não possuem esses valores estão como False no retorno do .isin()?
Quando fazemos:
df = df[selecao]
df
Saída:
Estamos selecionando as linhas em df correspondentes às linhas onde há True em selecao e atribuindo ao próprio df, substituindo o DataFrame original pelo DataFrame com a seleção de apenas os valores pares presentes na lista ([0, 2, 4, 6, 8, 10]).
Qualquer dúvida estou sempre à disposição.
:)