Fusionando un resultado de pandas groupby de nuevo en DataFrame

Tengo un DataFrame que se parece a esto …

idn value 0 ID1 25 1 ID1 30 2 ID2 30 3 ID2 50 

Quiero agregar otra columna a este marco que es el máximo ‘valor’ agrupado por ‘idn’

Quiero un resultado que se vea así.

  idn value max_val 0 ID1 25 30 1 ID1 30 30 2 ID2 30 50 3 ID2 50 50 

Puedo extraer el máximo de ‘valor’ usando un grupo de forma similar …

 df[['idn', 'value']].groupby('idn')['value'].max() 

Sin embargo, no puedo volver a combinar ese resultado en el DataFrame original.

¿Cuál es la mejor manera de obtener el resultado deseado?

Gracias

Utilice el método de transform en un objeto groupby:

 In [5]: df['maxval'] = df.groupby(by=['idn']).transform('max') In [6]: df Out[6]: idn value maxval 0 ID1 25 30 1 ID1 30 30 2 ID2 30 50 3 ID2 50 50 

establezca el índice de df en idn y luego use df.merge . después de la fusión, restablecer el índice y cambiar el nombre de las columnas

 dfmax = df.groupby('idn')['value'].max() df.set_index('idn', inplace=True) df = df.merge(dfmax, how='outer', left_index=True, right_index=True) df.reset_index(inplace=True) df.columns = ['idn', 'value', 'max_value']