¿Cómo obtener las últimas N filas de un dataframe de pandas?

Tengo pandas dataframe df1 y df2 (df1 es vanila dataframe, df2 está indexado por ‘STK_ID’ y ‘RPT_Date’):

 >>> df1 STK_ID RPT_Date TClose sales discount 0 000568 20060331 3.69 5.975 NaN 1 000568 20060630 9.14 10.143 NaN 2 000568 20060930 9.49 13.854 NaN 3 000568 20061231 15.84 19.262 NaN 4 000568 20070331 17.00 6.803 NaN 5 000568 20070630 26.31 12.940 NaN 6 000568 20070930 39.12 19.977 NaN 7 000568 20071231 45.94 29.269 NaN 8 000568 20080331 38.75 12.668 NaN 9 000568 20080630 30.09 21.102 NaN 10 000568 20080930 26.00 30.769 NaN >>> df2 TClose sales discount net_sales cogs STK_ID RPT_Date 000568 20060331 3.69 5.975 NaN 5.975 2.591 20060630 9.14 10.143 NaN 10.143 4.363 20060930 9.49 13.854 NaN 13.854 5.901 20061231 15.84 19.262 NaN 19.262 8.407 20070331 17.00 6.803 NaN 6.803 2.815 20070630 26.31 12.940 NaN 12.940 5.418 20070930 39.12 19.977 NaN 19.977 8.452 20071231 45.94 29.269 NaN 29.269 12.606 20080331 38.75 12.668 NaN 12.668 3.958 20080630 30.09 21.102 NaN 21.102 7.431 

Puedo obtener las últimas 3 filas de df2 por:

 >>> df2.ix[-3:] TClose sales discount net_sales cogs STK_ID RPT_Date 000568 20071231 45.94 29.269 NaN 29.269 12.606 20080331 38.75 12.668 NaN 12.668 3.958 20080630 30.09 21.102 NaN 21.102 7.431 

mientras df1.ix[-3:] da todas las filas:

 >>> df1.ix[-3:] STK_ID RPT_Date TClose sales discount 0 000568 20060331 3.69 5.975 NaN 1 000568 20060630 9.14 10.143 NaN 2 000568 20060930 9.49 13.854 NaN 3 000568 20061231 15.84 19.262 NaN 4 000568 20070331 17.00 6.803 NaN 5 000568 20070630 26.31 12.940 NaN 6 000568 20070930 39.12 19.977 NaN 7 000568 20071231 45.94 29.269 NaN 8 000568 20080331 38.75 12.668 NaN 9 000568 20080630 30.09 21.102 NaN 10 000568 20080930 26.00 30.769 NaN 

Por qué ? ¿Cómo obtener las últimas 3 filas de df1 (dataframe sin índice)? Pandas 0.10.1

No te olvides de DataFrame.tail ! por ejemplo, df1.tail(10)

Esto se debe a que se usan índices enteros ( ix selecciona por etiqueta sobre -3 en lugar de por posición , y esto es por diseño: vea la indexación de enteros en pandas “gotchas” *).

* En las versiones más recientes de pandas, prefiero loc o iloc para eliminar la ambigüedad de ix como posición o etiqueta:

 df.iloc[-3:] 

ver los documentos .

Como lo señala Wes, en este caso específico, ¡solo debes usar la cola!

Si está cortando por posición, __getitem__ (es decir, cortar con [] ) funciona bien y es la solución más concisa que he encontrado para este problema.

 df[-3:] STK_ID RPT_Date TClose sales discount 8 568 20080331 38.75 12.668 NaN 9 568 20080630 30.09 21.102 NaN 10 568 20080930 26.00 30.769 NaN 

Esto es lo mismo que llamar a df.iloc[-3:] , por ejemplo ( iloc delega internamente a __getitem__ ).

Notas

 pd.__version__ # '0.23.4' 

Además, si desea buscar las últimas N filas para cada grupo, use groupby y GroupBy.tail :

 df.groupby('A').tail(n)