pandas obtener promedio de un groupby

Estoy tratando de encontrar el costo mensual promedio por usuario_id, pero solo puedo obtener el costo promedio por usuario o el costo mensual por usuario.

Debido a que agrupo por usuario y mes, no hay manera de obtener el promedio del segundo grupo por (mes) a menos que transforme la salida de groupby a otra cosa.

Este es mi df:

df = { 'id' : pd.Series([1,1,1,1,2,2,2,2]), 'cost' : pd.Series([10,20,30,40,50,60,70,80]), 'mth': pd.Series([3,3,4,5,3,4,4,5])} cost id mth 0 10 1 3 1 20 1 3 2 30 1 4 3 40 1 5 4 50 2 3 5 60 2 4 6 70 2 4 7 80 2 5 

Puedo obtener la sum mensual pero quiero el promedio de los meses para cada ID de usuario.

 df.groupby(['id','mth'])['cost'].sum() id mth 1 3 30 4 30 5 40 2 3 50 4 130 5 80 

Quiero algo como esto:

 id average_monthly 1 (30+30+40)/3 2 (50+130+80)/3 

El restablecimiento del índice debería funcionar. Prueba esto:

 In [19]: df.groupby(['id', 'mth']).sum().reset_index().groupby('id').mean() Out[19]: mth cost id 1 4.0 33.333333 2 4.0 86.666667 

Usted puede simplemente caer mth si quieres. La lógica es que después de la parte de la sum , tienes esto:

 In [20]: df.groupby(['id', 'mth']).sum() Out[20]: cost id mth 1 3 30 4 30 5 40 2 3 50 4 130 5 80 

Restablecer el índice en este punto le dará meses únicos.

 In [21]: df.groupby(['id', 'mth']).sum().reset_index() Out[21]: id mth cost 0 1 3 30 1 1 4 30 2 1 5 40 3 2 3 50 4 2 4 130 5 2 5 80 

Es solo una cuestión de agruparlo de nuevo, esta vez usando la mean lugar de la sum . Esto debería darte los promedios.

Haznos saber si esto te ayudó.