Saya memiliki kerangka data panda df1
dan df2
( df1 adalah vanila dataframe, df2 diindeks oleh '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
Saya bisa mendapatkan 3 baris terakhir df2 dengan:
>>> 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
sambil df1.ix[-3:]
memberikan semua baris:
>>> 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
Mengapa Bagaimana cara mendapatkan 3 baris terakhir df1
(dataframe tanpa indeks)? Panda 0.10.1
df[-3:]
untuk menghasilkan hasil yang Anda inginkan. Ini diatasi sebagai bug oleh WesM. Tidak yakin apakah / ketika sudah diperbaiki: stackoverflow.com/questions/14035817/…ix
adalah bug, tetapi memberikan irisan negatif__getitem__
tidak.df.iloc[-3:]
Delegasi internal untuk__getitem__
dengan argumen yang sama, lakukandf[-3:]
adalah jalan pintas untukdf.iloc[-3:]
, bukan bug.Jawaban:
Jangan lupa
DataFrame.tail
! misalnyadf1.tail(10)
sumber
Ini karena menggunakan indeks integer (
ix
memilih mereka dengan label lebih dari -3 daripada posisi , dan ini berdasarkan desain: lihat pengindeksan bilangan bulat di panda "gotcha" *).* Dalam versi panda yang lebih baru lebih suka loc atau iloc untuk menghapus ambiguitas ix sebagai posisi atau label:
lihat dokumen .
Seperti yang ditekankan oleh Wes, dalam kasus khusus ini Anda harus menggunakan ekor!
sumber
Jika Anda mengiris dengan posisi,
__getitem__
(yaitu, mengiris dengan[]
) berfungsi dengan baik, dan merupakan solusi paling ringkas yang saya temukan untuk masalah ini.Ini sama dengan menelepon
df.iloc[-3:]
, misalnya (iloc
delegasi internal ke__getitem__
).Sebagai tambahan, jika Anda ingin menemukan baris N terakhir untuk setiap grup, gunakan
groupby
danGroupBy.tail
:sumber