2015-04-15 11 views
6

ho un dataframe che assomiglia a questo ...Unire risultato panda groupby di nuovo in dataframe

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

Voglio aggiungere un'altra colonna a questa cornice che è il massimo 'valore' raggruppati per 'IDN'

Voglio un risultato simile a questo.

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

posso estrarre il massimo di 'valore' con un gruppo in questo modo ...

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

tuttavia, sono in grado di unire quel risultato di nuovo nel dataframe originale.

Qual è il modo migliore per ottenere il risultato desiderato?

Thank You

risposta

6

utilizzare il metodo transform su un oggetto 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 
+1

'.transform ('max')' è anche un collegamento a questa :) –

+1

@'AndyHayden 'lambda c: print ('mi piace lambdas')' :) –

1

impostare l'indice di df a idn, e quindi utilizzare df.merge. dopo l'unione, azzerare l'indice e rinominare le colonne

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