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

[Dúvida] desafio: notas_finais limitar a nota máxima a 10

Gostaria de limitar as notas ao máximo 10. tentei fazer operações no lambda com mais de um parâmetro ao criar a variável. Usando o dados['notas_finais'] = dados['Notas'].apply(lambda x: x + dados['pontos_extras'] if x<=6 else 10), ele acaba somando os pontos extras de todo mundo para cada linha

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Eu tentei de uma forma diferente e consegui o resultado esperado: dados['notas_finais'] = dados['Notas'].apply(lambda x: x * 1.4 if x<=6 else 10)

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Queria saber se tem como fazer passando outro parâmetro ou coluna dentro do lambda (como fiz na primeira tentativa).

2 respostas
solução!

Olá Vinicius! Tudo ok contigo?

Na sua primeira tentativa, o problema foi que você estava tentando somar os pontos extras de todos os alunos para cada linha, o que não é o resultado desejado. Isso ocorre porque a variável dados['pontos_extras'] não é filtrada de acordo com o aluno atual no lambda. Portanto, o cálculo acaba sendo aplicado a todos os alunos, somando todos os pontos extras.

Sua segunda tentativa foi uma abordagem onde você multiplica as notas por 1.4 caso elas sejam menores ou iguais a 6 e atribui 10 às notas maiores do que 6. Parece que essa abordagem atingiu o resultado esperado.

Quanto à sua pergunta sobre como passar outro parâmetro ou coluna dentro do lambda, a resposta é sim. Você pode usar a função apply para aplicar uma função personalizada que leva mais de um argumento. No entanto, a maneira como você passa esses argumentos deve ser cuidadosamente considerada.

No seu caso, se você quiser aplicar uma operação que envolve duas colunas, como a soma das notas e dos pontos extras, é melhor usar a função apply em conjunto com a função lambda. Aqui está como você pode fazer isso:

dados['notas_finais'] = dados.apply(lambda row: row['Notas'] + row['pontos_extras'] if row['Notas'] <= 6 else 10, axis=1)

Observe que usei axis=1 no final da chamada da função apply. Isso garante que a função lambda seja aplicada linha a linha, e você pode acessar os valores das colunas usando row['NomeDaColuna'].

No entanto, dado que você já encontrou uma solução que parece funcionar bem, não há necessidade urgente de adotar essa abordagem alternativa. Sua segunda tentativa, multiplicando por 1.4 e definindo o limite em 10, parece ser uma solução eficaz para o problema.

Se você tiver mais perguntas ou precisar de mais assistência, fique à vontade para perguntar.

Abraços e bons estudos!

Muito obrigado, era exatamente isso que eu estava procurando. Como usar o lambda acessando cada linha.