У меня есть pandas dataframe df1
и df2
(df1 - это vanila dataframe, df2 индексируется как 'STK_ID' & '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
Я могу получить последние 3 строки df2:
>>> 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
пока df1.ix[-3:]
дадим все строки:
>>> 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
Зачем ? Как получить последние 3 строки df1
(датафрейм без индекса)? Панды 0.10.1
df[-3:]
для получения желаемых результатов. Это было сочтено ошибкой WesM. Не уверен, если / когда это будет исправлено: stackoverflow.com/questions/14035817/…ix
был ошибкой, но передача отрицательных срезов__getitem__
- нет.df.iloc[-3:]
внутренне делегирует__getitem__
с теми же аргументами, dodf[-3:]
это ярлыкdf.iloc[-3:]
, а не ошибка.Ответы:
Не забывайте
DataFrame.tail
! напримерdf1.tail(10)
источник
Это происходит из-за использования целочисленных индексов (
ix
выбирает их по метке над -3, а не по позиции , и это по замыслу: см. Индексирование целых чисел в пандах "gotchas" *).* В более новых версиях панд предпочитают loc или iloc, чтобы убрать неоднозначность ix как позиции или метки:
смотри документы .
Как указывает Уэс, в этом конкретном случае вы должны просто использовать хвост!
источник
Если вы выполняете нарезку по позиции
__getitem__
(то есть срезание с помощью[]
), это хорошо работает и является наиболее кратким решением, которое я нашел для этой проблемы.Это то же самое, что
df.iloc[-3:]
, например, вызов (iloc
внутренние делегаты__getitem__
).Кроме того, если вы хотите найти последние N строк для каждой группы, используйте
groupby
иGroupBy.tail
:источник