Python Pandas valor máximo en un grupo como una nueva columna

Estoy tratando de calcular una nueva columna que contiene valores máximos para cada uno de varios grupos. Vengo de un fondo de Stata, así que sé que el código de Stata sería algo como esto:

by group, sort: egen max = max(odds) 

Por ejemplo:

 data = {'group' : ['A', 'A', 'B','B'], 'odds' : [85, 75, 60, 65]} 

Entonces me gustaría que se viera como:

  group odds max A 85 85 A 75 85 B 60 65 B 65 65 

Finalmente, estoy tratando de formar una columna que tenga 1/(max-min) * odds donde max y min son para cada grupo.

Utilice groupby + transform :

 df['max'] = df.groupby('group')['odds'].transform('max') 

Esto es equivalente a lo verboso:

 maxima = df.groupby('group')['odds'].max() df['max'] = df['group'].map(maxima) 

El método de transform alinea el resultado groupby con el indexador groupby , por lo que no se requiere una asignación explícita.

 df['max'] = df.group_col.map(lambda x: df.groupby('group_col').odds.max()[x])