Tengo un marco de datos de pandas df1
y df2
(df1 es un marco de datos de vanila, 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
(marco de datos sin índice)? Pandas 0.10.1
df[-3:]
para producir los resultados que desea. Esto fue abordado como un error por WesM. No estoy seguro de si / cuándo se está arreglando: stackoverflow.com/questions/14035817/…ix
fue un error, pero pasar rebanadas negativas__getitem__
no lo es.df.iloc[-3:]
internamente delega__getitem__
con los mismos argumentos, dodf[-3:]
es un acceso directo paradf.iloc[-3:]
, no un error.Respuestas:
No se olvide
DataFrame.tail
! p.ejdf1.tail(10)
fuente
Esto se debe al uso de índices enteros (los
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 los pandas, prefiera loc o iloc para eliminar la ambigüedad de ix como posición o etiqueta:
ver los documentos .
Como señala Wes, en este caso específico, ¡solo debes usar la cola!
fuente
Si está cortando por posición,
__getitem__
(es decir, cortando con[]
) funciona bien, y es la solución más sucinta que he encontrado para este problema.Esto es lo mismo que llamar
df.iloc[-3:]
, por ejemplo (iloc
delega internamente a__getitem__
).Por otro lado, si desea encontrar las últimas N filas para cada grupo, use
groupby
yGroupBy.tail
:fuente