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

Quando utilizar o .apply e a função lambda?

Entendo que o exercício teve como objetivo demonstrar de uma maneira didática que

alunos['Notas-Média(Notas)'] = alunos.Notas - alunos.Notas.mean()

é equivalente a

alunos['Notas-Média(Notas)'] = alunos['Notas'].apply(lambda x: x - alunos['Notas'].mean())

Mas existe algum caso em que uma varredura de um DataFrame, ou uma criação de uma nova variável que dependa de outras variáveis do DataFrame possa acontecer utilizando o apply? Ou as duas maneiras sempre funcionam e o que muda é a questão da notação?

Also, existe alguma diferença notável no desempenho computacional? Obrigado

2 respostas
solução!

Olá Matusalem,

Em exemplos mais simples você pode utilizar a primeira maneira que é mais fácil de ententer para quem está lendo o código, pois a diferença de desempenho entre os dois casos é insignificante.

Obs.: Nesse seu exemplo em específico o apply vai ter um pior desempenho porque vai executar o alunos['Notas'].mean() várias vezes. Colocando esse valor em uma variável e passando essa variável no seu lugar no apply o desempenho é melhorado.

Mas existem alguns casos em que é melhor você utilizar o apply, como por exemplo em uma situação onde muitas alterações sejam feitas, nesse seu exemplo é feito apenas uma subtração e mais nada, mas em alguns casos pode ser necessário realizar muitas operações. o apply também tem a vantagem de poder ser executado nas linhas ou nas colunas.

Exemplo:

# Criando uma função para gerar um status de cada aluno
def add_obs(aluno):
    obs = aluno['Nome'] + ' teve a nota ' + str(aluno['Notas'])

    if aluno['Notas'] >= 7:
        obs = obs + ' e foi aprovado!'
    else:
        obs = obs + ' e foi reprovado!'

    return obs

# Aplicando a função acima para cada linha do dataframe
# axis=1 indica que queremos executar a função nas linhas
alunos.apply(add_obs, axis=1)
# Resultado:
0        Ary teve a nota 7.5 e foi aprovado!
1     Cátia teve a nota 2.5 e foi reprovado!
2     Denis teve a nota 5.0 e foi reprovado!
3      Beto teve a nota 10.0 e foi aprovado!
4      Bruna teve a nota 8.2 e foi aprovado!
5       Dara teve a nota 7.0 e foi aprovado!
6    Carlos teve a nota 6.0 e foi reprovado!
7     Alice teve a nota 5.6 e foi reprovado!

Espero ter ajudado, qualquer dúvida é só falar!

Excelente explicação. Muito obrigado.