Olá, Daniel! Tudo bom?
Quando selecionamos  notas_beltrano.loc[elemento_md - 1] por exemplo, estamos extraindo uma linha inteira de um dataframe no pandas.Podemos visualizar isso com um print().
print(notas_beltrano.loc[elemento_md - 1])
Output:
![Captura de tela, que mostra a saída do código  print(notas_beltrano.loc[elemento_md - 1]) com os valores da coluna index uma string chamada Física, coluna Beltrano com  valor  float 9.5,  dtype: object](https://imgur.com/YSDYIZa.png) 
 
Perceba que não é só o valor da nota de Física de da coluna 'Beltrano' (9,5),mas a nota e a coluna index também.
Por isso fazendo esta soma que foi executada.
result = ((notas_beltrano.loc[elemento_md - 1] + notas_beltrano.loc[elemento_md]))
print(result)
Teríamos esta saída:
 
 
O python não só somou o valor da nota, mas também concatenou a string História e Física. Por isso a soma não retornou erro algum já que concatenar a string é totalmente possível, mas por outro lado fazer a divisão de uma string não é, então ao tentar dividir este resultado, nos deparamos com o erro que você mencionou.
Para solucionar isso, você poderá selecionar somente a coluna com os valores que deseja fazer a operação.
Desta forma:
resultado = ((notas_beltrano.loc[elemento_md - 1][1] + notas_beltrano.loc[elemento_md][1])) // A coluna 0 é nossa coluna index com os nomes das matérias, já a coluna 1 sãos as notas de beltrano.
print(resultado)
Output:
12.5
E se tentarmos fazer a divisão agora teríamos o resultado desejado.
result = ((notas_beltrano.loc[elemento_md - 1][1] + notas_beltrano.loc[elemento_md][1]))
print(result/2)
Output:
6.25
Se ainda tiver alguma dúvida, estou por aqui. Ótimos estudos e grande abraço! 
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!