2015-04-15 25 views
6

içine geri pandalar GroupBy sonucunu birleştirme ben şöyle bir DataFrame ...DataFrame

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

Ben 'IDN' göre gruplandırılmış max 'değerini' olan bu çerçeveye başka bir sütun eklemek istediğiniz

Bunun gibi bir sonuç istiyorum.

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

Ben

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

Ancak, ben tekrar orijinal DataFrame içine birleştirme sonucunu alamıyorum ... gibi pek bir grubunu kullanarak 'value' max çıkarabilir.

İstediğiniz sonucu elde etmenin en iyi yolu nedir?

Sen

cevap

6

kullanın GroupBy nesnesinde transform yöntem adlandırmak:

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 ')', bu bir kısayol da :) –

+1

@AndyHayden 'lambda c: print ('lambdas'ı severim')' :) –

1

idn için df dizinini ayarlamak ederiz ve sonra df.merge kullanın. Birleştirmeden sonra, dizin sıfırlamak ve sütunlar

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