Arsenal estructurado de la media de Numpy

Supongamos que tengo una variedad estructurada de estudiantes (cadenas) y calificaciones de exámenes (ints), donde cada entrada es la puntuación que un estudiante específico recibió en una prueba específica. Cada estudiante tiene múltiples entradas en esta matriz, naturalmente.

Ejemplo
import numpy
grades = numpy.array([('Mary', 96), ('John', 94), ('Mary', 88), ('Edgar', 89), ('John', 84)],
                     dtype=[('student', 'a50'), ('score', 'i')])

print grades
#[('Mary', 96) ('John', 94) ('Mary', 88) ('Edgar', 89) ('John', 84)]

¿Cómo puedo calcular fácilmente el puntaje promedio de cada estudiante? En otras palabras, ¿cómo tomo la media de la matriz en la dimensión 'puntuación'? Me gustaria hacer

grades.mean('score')

y tener el regreso de Numpy

[('Mary', 92), ('John', 89), ('Edgar', 89)]

pero Numpy se queja

TypeError: an integer is required

¿Hay una manera Numpy-esque para hacer esto fácilmente? Creo que podría implicar tener una vista de la matriz estructurada con un tipo de dty diferente. Cualquier ayuda sería apreciada. Gracias.

Editar
>>> grades = numpy.zeros(5, dtype=[('student', 'a50'), ('score', 'i'), ('testid', 'i'])
>>> grades[0] = ('Mary', 96, 1)
>>> grades[1] = ('John', 94, 1)
>>> grades[2] = ('Mary', 88, 2)
>>> grades[3] = ('Edgar', 89, 1)
>>> grades[4] = ('John', 84, 2)
>>> np.mean(grades, 'testid')
TypeError: an integer is required

Respuestas a la pregunta(4)

Su respuesta a la pregunta