Pelo que entendi, você quer calcular, para cada filme , sua avaliação média.
Calculando a avaliação média de cada filme:
mean_rating = ratings.groupby("movie_id", as_index = False).apply(
{"nota" : pd.Series.mean })
Agrupando por filme, aplicamos a função de média na coluna notas. O parâmetro de as_index existe aqui só para que o resultado mantenha a coluna "movies" como uma coluna, e não jogue para o índice.
Então, precisamos saber o nome do filme à que se refere cada id. Para isso, vamos mesclar o nosso resultado com o DataFrame que possue essa listagem:
mean_rating = mean_rating.merge( movies, on = "movie_id", how = "left" )
Comparamos as colunas "movie_id" de cada Dataframe. Onde forem iguais, adicionaremos as colunas do segundo (movies) ao primeiro (mean_rating).
O parâmetro "left" nesse caso é um detalhe. Ele serve para dizer que, caso alguma linha do mean_rating não tenha nenhum par na coluna movies ( no caso de algum filme que não sabemos o nome, por alguma razão), devemos manter a linha, mas inserir as colunas com valor nulo.
Uma outra possibilidade seria utilizar "inner", para removermos linhas sem pares. Se quiser mais detalhes, pesquise por "Sql Joins".