2013-12-17 11 views
6

Ho un df e voglio prendere la riga più recente di seguito da CUSIP.Groupby - prendendo l'ultimo elemento - come posso mantenere i nan?

In [374]: df.head() 
Out[374]: 
       CUSIP  COLA   COLB  COLC 
date               
1992-05-08 AAA   238   4256  3.523346 
1992-07-13 AAA   NaN   4677  3.485577 
1992-12-12 BBB   221   5150  3.24 
1995-12-12 BBB   254   5150  3.25 
1997-12-12 BBB   245   Nan  3.25 
1998-12-12 CCC   234   5140  3.24145 
1999-12-12 CCC   223   5120  3.65145 

sto usando:

df = df.reset_index().groupby('CUSIP').last().reset_index.set_index('date') 

voglio che questo:

   CUSIP  COLA   COLB  COLC 
date   
1992-07-13 AAA   NaN   4677  3.485577  
1997-12-12 BBB   245   Nan  3.25 
1999-12-12 CCC   223   5120  3.65145 

Invece sto ottenendo:

   CUSIP  COLA   COLB  COLC 
date   
1992-07-13 AAA   238   4677  3.485577  
1997-12-12 BBB   245   5150  3.25 
1999-12-12 CCC   223   5120  3.65145 

Come faccio ad avere l'ultima() per prendere l'ultima fila del groupby compresi i NaN?

Grazie.

risposta

4

si può fare questo direttamente con un applicano al posto di ultimo (e ottenere la riga -1th di ciascun gruppo):

In [11]: df.reset_index().groupby('CUSIP').apply(lambda x: x.iloc[-1]).reset_index(drop=True).set_index('date') 
Out[11]: 
      CUSIP COLA COLB  COLC 
date         
1992-07-13 AAA NaN 4677 3.485577 
1997-12-12 BBB 245 NaN 3.250000 
1999-12-12 CCC 223 5120 3.651450 

[3 rows x 4 columns] 

In 0,13 (RC fuori ora), un modo più diretto più velocemente e sarà utilizzare cumcount:

In [12]: df[df.groupby('CUSIP').cumcount(ascending=False) == 0] 
Out[12]: 
      CUSIP COLA COLB  COLC 
date         
1992-07-13 AAA NaN 4677 3.485577 
1997-12-12 BBB 245 NaN 3.250000 
1999-12-12 CCC 223 5120 3.651450 

[3 rows x 4 columns] 
+0

per confermare, l'approccio cumcount richiederebbe reimpostare l'indice in una linea di prima, giusto? Inoltre, deve essere pd.cumcount? – user1911092

+0

@ user1911092 in 0.13 c'è un metodo groupcount del conto corrente, il codice sopra è copiato e incollato. (Quindi no, non è necessario ripristinare l'indice :)) –

+0

Huzzah per il conto! –

Problemi correlati