팬더 데이터 프레임이 df1
있고 df2
(df1은 바닐라 데이터 프레임이고 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
나는 df2의 마지막 3 행을 얻을 수 있습니다 :
>>> 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
답변
잊지 마세요 DataFrame.tail
! 예 :df1.tail(10)
답변
이것은 정수 인덱스를 사용하기 때문입니다 ( position 대신 -3 이상의 레이블ix
로 레이블 을 선택합니다). 이것은 의도적으로 설계된 것입니다. 팬더 “gotchas”의 정수 색인 참조 *).
* 팬더의 최신 버전에서는 loc 또는 iloc을 선호하여 위치 또는 레이블로 ix의 모호성을 제거합니다.
df.iloc[-3:]
문서를 참조하십시오 .
Wes가 지적했듯이이 특정한 경우에는 꼬리를 사용해야합니다!
답변
팬더 DataFrame의 마지막 N 행을 얻는 방법은 무엇입니까?
위치별로 슬라이싱하는 경우 __getitem__
(예 :로 슬라이싱 []
) 제대로 작동하고이 문제에서 찾은 가장 간결한 솔루션입니다.
pd.__version__
# '0.24.2'
df = pd.DataFrame({'A': list('aaabbbbc'), 'B': np.arange(1, 9)})
df
A B
0 a 1
1 a 2
2 a 3
3 b 4
4 b 5
5 b 6
6 b 7
7 c 8
df[-3:]
A B
5 b 6
6 b 7
7 c 8
df.iloc[-3:]
예를 들어 ( iloc
내부적으로에 위임)을 호출하는 것과 같습니다 __getitem__
.
옆으로, 각 그룹의 마지막 N 개 행을 찾으려면 groupby
and를 사용하십시오 GroupBy.tail
.
df.groupby('A').tail(2)
A B
1 a 2
2 a 3
5 b 6
6 b 7
7 c 8