Olá, Luis! Tudo bem com você?
Peço desculpas pela interpretação errada da sua dúvida.
Para fazer o que você está querendo primeiro temos que calcular a mediana para todos os tipos. Podemos fazer isso da seguinte forma:
medianas = dados.groupby('Tipo').agg({'Condominio': 'median'})
medianas
Saída:
Tipo | Condominio |
---|
Apartamento | 976 |
Box/Garagem | 345 |
Casa | 816.5 |
Casa Comercial | 750 |
Casa de Condomínio | 1100 |
Casa de Vila | 80 |
Chácara | nan |
Conjunto Comercial/Sala | 1106.5 |
Flat | 1800 |
Galpão/Depósito/Armazém | 4879 |
Hotel | nan |
Indústria | nan |
Loft | 664 |
Loja Shopping/ Ct Comercial | 1243 |
Loja/Salão | 1170 |
Loteamento/Condomínio | nan |
Pousada/Chalé | 295 |
Prédio Inteiro | 13460 |
Quitinete | 420 |
Studio | 549 |
Sítio | nan |
Terreno Padrão | 1 |
Dessa forma você calculou as medianas para cada tipo. Percebe-se que alguns valores são nan, isso acontece porque todas as amostras desse tipo de imóvel tem condominio igual a nan, portanto não há como calcular a mediana.
Agora que temos as medianas de cada tipo, vamos preencher os dados faltantes utilizando os métodos .fillna e .apply da seguinte forma:
dados_preenchidos = dados.apply(lambda x: x.fillna(medianas.loc[x['Tipo'], 'Condominio']), axis = 1)
dados_preenchidos
O que esse de código está fazendo a preenchendo os dados faltantes, através do método fillna com os valores de mediana de cada tipo, calculada anteriormente.
Conferindo novamente a base de dados:
dados_preenchidos.isnull().sum()
Saída:
Tipo 0
Bairro 0
Quartos 0
Vagas 0
Suites 0
Area 0
Valor 0
Condominio 19
IPTU 9
dtype: int64
Percebemos que alguns valores ainda estão ausentes em Condominio, que são justamente aqueles tipos onde todos os valores eram nan no conjunto de dados original. Para comprovar isso, execute o código abaixo:
lista = dados_preenchidos[dados_preenchidos['Condominio'].isna()].Tipo.unique()
for i in lista:
display(df_agg.get_group(i))
Qualquer dúvida estou à disposição.
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.Bons Estudos!