Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Classificação do IMC (Índice de Massa Corporal)

import pandas as pd

# Dados das pessoas
dados = {
    'Pessoa': ['Ana', 'Bruno', 'Carla', 'Daniel', 'Eduarda', 'Felipe', 'Gabriela', 'Henrique'],
    'Peso': [50, 80, 70, 95, 60, 110, 45, 130],
    'Altura': [1.60, 1.75, 1.68, 1.80, 1.55, 1.90, 1.50, 1.85]
}

# Criando o DataFrame
df_saude = pd.DataFrame(dados)
df_saude

def categoriza_imc(imc):
  if imc < 18.5:
    return 'Abaixo do peso'
  elif imc <= 24.9:
    return 'Peso Normal'
  elif imc <= 29.9:
    return 'Sobrepeso'
  elif imc <= 34.9:
    return 'Obesidade Grau 1' 
  elif imc <= 39.9:
    return 'Obesidade Grau 2'
  elif imc >= 40:
    return 'Obesidade Grau 3'    
    
df_saude['IMC'] = df_saude['Peso']/df_saude['Altura'].apply(lambda x : x**2)
df_saude['CategorizaIMC'] = df_saude['IMC'].apply(categoriza_imc)
print(df_saude[['Pessoa', 'Altura', 'Peso', 'Altura', 'IMC', 'CategorizaIMC' ]])
1 resposta
solução!

Ei, Marcia!

Seu código está muito bacana! Você usou o Pandas direitinho para criar e trabalhar com o DataFrame, e a função categoriza_imc ficou super bem feita, cobrindo todas as faixas de IMC de forma clara. A aplicação do apply pra calcular e categorizar o IMC foi bem eficiente, e a saída com as colunas organizadas também.

Parabéns pelo trabalho, tá no caminho certo!

Uma ideia para treinar, teste adicionar uma validação para pesos ou alturas inválidos (ex.: negativos), por exemplo:

import pandas as pd


dados = {
    'Pessoa': ['Ana', 'Bruno', 'Carla', 'Daniel', 'Eduarda', 'Felipe', 'Gabriela', 'Henrique'],
    'Peso': [50, 80, 70, 95, 60, 110, 45, 130],
    'Altura': [1.60, 1.75, 1.68, 1.80, 1.55, 1.90, 1.50, 1.85]
}


df_saude = pd.DataFrame(dados)


def valida_dados(row):
    if row['Peso'] <= 0 or row['Altura'] <= 0:
        return 'Dados inválidos'
    return 'Válido'


df_saude['Validação'] = df_saude.apply(valida_dados, axis=1)


def categoriza_imc(imc):
    if imc < 18.5:
        return 'Abaixo do peso'
    elif imc <= 24.9:
        return 'Peso Normal'
    elif imc <= 29.9:
        return 'Sobrepeso'
    elif imc <= 34.9:
        return 'Obesidade Grau 1'
    elif imc <= 39.9:
        return 'Obesidade Grau 2'
    elif imc >= 40:
        return 'Obesidade Grau 3'


df_saude['IMC'] = df_saude.apply(
    lambda row: row['Peso'] / (row['Altura'] ** 2) if row['Validação'] == 'Válido' else None, axis=1
).round(2)


df_saude['CategorizaIMC'] = df_saude['IMC'].apply(
    lambda x: categoriza_imc(x) if pd.notnull(x) else 'Não calculado'
)


print(df_saude[['Pessoa', 'Peso', 'Altura', 'IMC', 'CategorizaIMC', 'Validação']])

Continue praticando e compartilhando suas atividades.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!