Olá, Marcelo! Tudo bem com você?
Suas afirmações acerca do que está acontecendo nesta linha de código estão corretas. Quando estamos fazendo dados['Valor'] >= limite_inferior[tipo]) & (dados['Valor'] <= limite_superior[tipo]
estamos selecionando todos os valores que obedecem a condição de estarem dentro do limite_inferior e do limite_superior do tipo que está sendo iterado (apartamento, casa, casa de vila...). Por exemplo, se o tipo que está sendo feita a iteração for apartamento e seu limite_inferior = 3300 e limite_superior = 9950, então todos os valores em dados['Valor']
que sejam maiores ou iguais a 3300 e menores ou iguais a 9950 serão selecionados como True, incluindo aqueles que não forem do tipo apartamentos.
Mas então como nós garantimos que os valores que aparecem no boxplot de apartamento não tenham valores de casa, por exemplo?
Isso é realizado com a variável selecao
que o instrutor cria. Vou deixar aqui o código completo desta parte:
# Aqui começa o código
dados_new = pd.DataFrame()
for tipo in grupo_tipo.groups.keys():
eh_tipo = dados['Tipo'] == tipo
eh_dentro_limite = (dados['Valor'] >= limite_inferior[tipo]) & (dados['Valor'] <= limite_superior[tipo])
selecao = eh_tipo & eh_dentro_limite
dados_selecao = dados[selecao]
dados_new = pd.concat([dados_new, dados_selecao])
Quando o instrutor cria a variavel eh_tipo
o que ele está criando é também uma Series do Pandas com o valores True e False. Será True quando o tipo que está sendo iterado (apartamento, por exemplo) estiver nas linhas de dados['Tipo']
, então se na primeira linha o tipo for apartamento, será True se na segunda linha for casa, será False e assim sucessivamente. Quando fazemos selecao = eh_tipo & eh_dentro_limite
, o que estamos dizendo é "faça uma seleção para mim, que me retorne True apenas quando o tipo for exatamente o que eu estou iterando e que esteja dentro do limite", dessa forma garantimos que aqueles valores que forem de tipos diferentes que entraram quando executamos a linha "dados['Valor'] >= limite_inferior[tipo]) & (dados['Valor'] <= limite_superior[tipo]
" sejam eliminados, pois não correspondem ao tipo que está sendo iterado no momento. Ao realizar dados_selecao = dados[selecao]
fazemos a filtragem no conjunto de dados e após isso realizamos a concatenação em um novo DataFrame para não sobrescrever as informações no próximo laço do for.
Espero ter ajudado, mas se ainda persistir alguma dúvida estou sempre à disposição.
:)
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.Bons Estudos!