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']