Normalizar DataFrame por grupo

Digamos que tengo algunos datos generados de la siguiente manera:

N = 20
m = 3
data = np.random.normal(size=(N,m)) + np.random.normal(size=(N,m))**3

y luego creo alguna variable de categorización:

indx = np.random.randint(0,3,size=N).astype(np.int32)

y generar un DataFrame:

import pandas as pd
df = pd.DataFrame(np.hstack((data, indx[:,None])), 
             columns=['a%s' % k for k in range(m)] + [ 'indx'])

Puedo obtener el valor medio, por grupo, como:

df.groubpy('indx').mean()

Lo que no estoy seguro de cómo hacer es restar la media de cada grupo, por columna en los datos originales, de modo que los datos en cada columna se normalicen por la media dentro del grupo. Cualquier sugerencia sera apreciada.

Respuestas a la pregunta(4)

Su respuesta a la pregunta