Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Dúvida no For

Olá, boa tarde

Neste trecho do for:

eh_dentro_limite = (dados['Valor'] >= limite_inferior[tipo]) & (dados['Valor'] <= limite_superior[tipo])

Eu entendi que em "limite_inferior[tipo]" e "limite_superior [tipo]" está sendo pego o limite do tipo que está sendo iterado no momento. OK. Só que em "dados['Valor']" o tipo do imóvel está sendo validado? Por exemplo, digamos que esteja sendo iterado o tipo Apartamento. O dados['Valor'] vai pegar o valor de todos os imóveis, não só de apartamentos, e comparar se é >= ou <= aos limites do tipo Apartamento. Se um imóvel tipo Quitinete tiver valor entre os limites do tipo Apartamento, vai ser selecionado, não? Senão, o que está garantindo que isso não seja feito? Não ficou claro.

2 respostas
solução!

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!

entendi, obrigado!