2017-01-25 9 views
2

내 dataframe 아래와 같이 보이는 속성에 대한 dataframe의 마지막 n 행을 선택 : 위의 dataframe을 감안할 때팬더 -

id, date, target 
1,2016-10-24,22 
1,2016-10-25,31 
1,2016-10-27,44 
1,2016-10-28,12 
2,2016-10-21,22 
2,2016-10-22,31 
2,2016-10-25,44 
2,2016-10-27,12 

, 나는이 DF2를 만들기 위해 ID의 마지막 두 행을 선택하려면, 다른 df1 나머지. 나는이 작업을 수행 할 수있는 방법

id, date, target 
1,2016-10-27,44 
1,2016-10-28,12 
2,2016-10-25,44 
2,2016-10-27,12 

DF2

id, date, target 
1,2016-10-24,22 
1,2016-10-25,31 
2,2016-10-21,22 
2,2016-10-22,31 

DF1

?

미리 감사드립니다.

답변

1

당신은 df2를 만드는 GroupBy.tail을 사용할 수 있습니다, 다음 df1 인덱스와 원래의 difference을 얻고 df에서 loc 행에 의해 선택 -이 df1입니다 :

df2 = df.groupby('id').tail(2) 
print (df2) 
    id  date target 
2 1 2016-10-27  44 
3 1 2016-10-28  12 
6 2 2016-10-25  44 
7 2 2016-10-27  12 

print (df.index.difference(df2.index)) 
Int64Index([0, 1, 4, 5], dtype='int64') 

df1 = df.loc[df.index.difference(df2.index)] 
print (df1) 
    id  date target 
0 1 2016-10-24  22 
1 1 2016-10-25  31 
4 2 2016-10-21  22 
5 2 2016-10-22  31 
1

당신은 df.groupby('id').tail(2) 사용할 수 있습니다 http://pandas.pydata.org/pandas-docs/stable/generated/pandas.core.groupby.GroupBy.tail.html

+0

@Join Zwinck 고마워. 그러나 나는 나의 질문을 편집했다. 내 질문에 다시 대답 할 수 있니? – Mansumen

+0

@Mansumen : 제가 제안한 것을 시도해보고 잠시 시간을내어 나머지 작업을 코드에서 직접 해보십시오. 'groupby'를 반드시 사용할 필요는 없습니다. 다른 접근법을 사용하는 것이 더 쉬울 수도 있습니다. 시도 해봐. –