Oi, Kleison, tudo bem?
O problema que você está enfrentando é que a função apply
está retornando uma série para cada nome, em vez de um único valor. Uma solução para esse problema é utilizar o código abaixo:
# Extrair o nome do candidato do DataFrame df_candidato
df_candidato['NOME'] = df_candidato['CANDIDATO'].str.split().str[0]
# Mesclar os DataFrames com base no nome do candidato
df_final = df_candidato.merge(df_resultado, left_on='NOME', right_on='CANDIDATO', how='left')
# Descartar colunas intermediárias e renomear
df_final.drop(columns=['CANDIDATO_x', 'NOME'], inplace=True)
df_final.rename(columns={'CANDIDATO_y': 'CANDIDATO', 'NOTA': 'NOTA'}, inplace=True)
print(df_final)
Vamos explicar cada uma das linhas:
df_candidato['NOME'] = df_candidato['CANDIDATO'].str.split().str[0]
: nesta linha, você está adicionando uma nova coluna chamada 'NOME' ao DataFrame df_candidato. Essa coluna é preenchida com o primeiro nome do candidato, que é extraído da coluna 'CANDIDATO'. O método str.split()
divide o conteúdo da coluna 'CANDIDATO' em palavras com base nos espaços em branco, e .str[0]
pega o primeiro elemento da lista resultante, que é o primeiro nome do candidato.
df_final = df_candidato.merge(df_resultado, left_on='NOME', right_on='CANDIDATO', how='left')
: nesta linha, você está mesclando os DataFrames df_candidato e df_resultado com base nas colunas 'NOME' do DataFrame df_candidato e 'CANDIDATO' do DataFrame df_resultado. A opção how='left'
indica que você deseja realizar uma junção à esquerda, o que significa que todos os registros do df_candidato serão mantidos, e apenas os registros correspondentes no df_resultado serão incluídos na junção.
df_final.drop(columns=['CANDIDATO_x', 'NOME'], inplace=True)
: nesta linha, você está removendo duas colunas do DataFrame df_final. As colunas 'CANDIDATO_x' e 'NOME' são descartadas. O argumento inplace=True
faz com que as alterações sejam feitas diretamente no DataFrame, sem a necessidade de atribuir o resultado de volta a df_final.
df_final.rename(columns={'CANDIDATO_y': 'CANDIDATO', 'NOTA': 'NOTA'}, inplace=True)
: nesta linha, você está renomeando duas colunas no DataFrame df_final. A coluna 'CANDIDATO_y' é renomeada para 'CANDIDATO', e a coluna 'NOTA' é renomeada para 'NOTA'. Mais uma vez, o argumento inplace=True
indica que as alterações devem ser feitas diretamente no DataFrame.
print(df_final)
: finalmente, você está imprimindo o DataFrame resultante após todas as operações de mesclagem, eliminação de colunas intermediárias e renomeação.
O resultado utilizando o código acima é uma tabela que traz a instituição, o nome do candidato e a nota:
Todavia, vale ressaltar que como não tenho acesso ao cenário completo do projeto outros testes terão de ser feitos a fim de obter o resultado esperado, mas espero que esta resposta seja um bom ponto de partida para a resolução do seu problema.
Abraços!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!