2015-04-15 8 views
6

Ich habe ein Datenrahmen, der so aussieht ...Zusammenführen eines Pandas groupby Ergebnis zurück in Datenrahmen

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

Ich möchte eine andere Spalte an diesem Rahmen hinzufügen, dass die max ‚Wert‘ ist gruppiert nach ‚idn‘

Ich möchte ein Ergebnis, das so aussieht.

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

kann ich den max von ‚Wert‘ extrahiere eine Gruppe wie so mit ...

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

Aber ich bin nicht in der Lage, dieses Ergebnis wieder in den ursprünglichen Datenrahmen zu verschmelzen.

Was ist der beste Weg, um das gewünschte Ergebnis zu erhalten?

Danke

Antwort

6

Verwenden der transform Methode auf einem Objekt umbenennen 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')' ist auch eine Verknüpfung zu diesem :) –

+1

@AndyHayden 'Lambda c: drucken ('Ich mag Lambdas')' :) –

1

den Index df auf idn gesetzt, und dann df.merge verwenden. nach der Zusammenführung, um den Index zurückgesetzt und Spalten

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