División de pandas (.div) con multiindex

Tengo algo parecido a esto

df = pd.DataFrame(np.random.randint(2, 10, size = (5, 2))) df.index = pd.MultiIndex.from_tuples([(1, 'A'), (2, 'A'), (4, 'B'), (5, 'B'), (8, 'B')]) df.index.names = ['foo', 'bar'] df.columns = ['count1', 'count2'] df 

lo que da:

  count1 count2 foo bar 1 A 6 7 2 A 2 9 4 B 6 7 5 B 4 6 8 B 5 6 

También tengo una lista de totales, obtenidos de otra parte, por el mismo índice ‘foo’:

 totals = pd.DataFrame([2., 1., 1., 1., 10.]) totals.index = [1, 2, 4, 5, 8] totals.index.names = ['foo'] totals 

lo que da:

  0 foo 1 2 2 1 4 1 5 1 8 10 

¿Cómo puedo dividir todas las columnas de df ( count1 y count2 ) por el número foo que hay en los totales ? (Por lo tanto, tengo que coincidir con el número ‘foo’)

Revisé esta pregunta , que parece que debería hacer el truco, pero no pude resolverlo.

Lo intenté

 df.div(totals, axis = 0) 

y cambiando la opción de nivel en div , pero sin éxito.

Como siempre, muchas gracias por tu tiempo.

tratar:

 df.div(totals[0],axis='index',level='foo') count1 count2 foo bar 1 A 1.0 4.5 2 A 4.0 8.0 4 B 5.0 9.0 5 B 5.0 5.0 8 B 0.9 0.5 

además:

 totals = pd.DataFrame([2., 1., 1., 1., 10.]) totals.index = [[1, 2, 4, 5, 8],['A', 'A', 'B', 'A', 'B']] totals.index.names = ['foo','bar'] totals 0 foo bar 1 A 2.0 2 A 1.0 4 B 1.0 5 A 1.0 8 B 10.0 df[['count1','count2']].div(totals[0],axis='index') count1 count2 foo bar 1 A 1.0 4.5 2 A 4.0 8.0 4 B 5.0 9.0 5 A NaN NaN B NaN NaN 8 B 0.9 0.5 

Usando la lista de values de los totals[0] funciona:

 df.div(totals[0].values, axis=0) 

Pero no toma en cuenta el índice de los totals . No sé por qué esto no funciona:

 df.div(totals[0], level=0, axis=0)