Pandas Muy Simple Porcentaje de tamaño total de Grupo por

Estoy teniendo problemas para una operación aparentemente increíblemente fácil. ¿Cuál es la forma más sucinta de obtener un porcentaje del total de un grupo por operación, como df.groupby['col1'].size() ? Mi DF después de la agrupación se ve así y solo quiero un porcentaje del total. Recuerdo haber usado una variación de esta statement en el pasado pero no puedo hacer que esto funcione ahora: percent = totals.div(totals.sum(1), axis=0)

DF original:

  ABC 0 77 3 98 1 77 52 99 2 77 58 61 3 77 3 93 4 77 31 99 5 77 53 51 6 77 2 9 7 72 25 78 8 34 41 34 9 44 95 27 

Resultado:

 df1.groupby('A').size() / df1.groupby('A').size().sum() A 34 0.1 44 0.1 72 0.1 77 0.7 

Aquí está lo que se me ocurrió hasta ahora, que parece una forma bastante razonable de hacer esto:

 df.groupby('col1').size().apply(lambda x: float(x) / df.groupby('col1').size().sum()*100) 

No sé si me estoy perdiendo algo, pero parece que podrías hacer algo como esto:

 df.groupby('A').size() * 100 / len(df) 

o

 df.groupby('A').size() * 100 / df.shape[0] 

Obteniendo un buen rendimiento (3.73s) en DF con forma (3e6,59) usando: df.groupby('col1').size().apply(lambda x: float(x) / df.groupby('col1').size().sum()*100)

Qué tal si:

 df = pd.DataFrame({'A': {0: 77, 1: 77, 2: 77, 3: 77, 4: 77, 5: 77, 6: 77, 7: 72, 8: 34, 9: None}, 'B': {0: 3, 1: 52, 2: 58, 3: 3, 4: 31, 5: 53, 6: 2, 7: 25, 8: 41, 9: 95}, 'C': {0: 98, 1: 99, 2: 61, 3: 93, 4: 99, 5: 51, 6: 9, 7: 78, 8: 34, 9: 27}}) >>> df.groupby('A').size().divide(sum(df['A'].notnull())) A 34 0.111111 72 0.111111 77 0.777778 dtype: float64 >>> df ABC 0 77 3 98 1 77 52 99 2 77 58 61 3 77 3 93 4 77 31 99 5 77 53 51 6 77 2 9 7 72 25 78 8 34 41 34 9 NaN 95 27