2014-03-30 4 views
0

pandas groupby를 사용하여 마지막 n 인스턴스의 평균을 얻는 가장 좋은 방법은 무엇입니까?pandas groupby last n

frame = pd.DataFrame({'Student' : ['Bob', 'Bill', 'Bob', 'Bob', 'Bill', 'Joe', 'Joe', 'Bill', 'Bob', 'Joe'],          
          'Score' : np.random.random(10)}) 

가 어떻게 각 학생에 대한 지난 3 개 점수의 평균을받을 수 있나요 :

예를 들어 나는이 같은 dataframe 있습니다.

답변

2

어쩌면 이렇게 될까요?

>>> df.groupby("Student")["Score"].apply(lambda x: x.iloc[-3:].mean()) 
Student 
Bill  0.513128 
Bob  0.342806 
Joe  0.469662 
Name: Score, dtype: float64 

당신은 .iloc[-3:]를 사용하여 마지막 세 (이하) 요소에 액세스하고 .mean()를 사용하여 평균을 취할 수 있습니다.

다른 방법으로는 두 개의 패스를 대신 .tail(3)를 사용하거나 할 수있는 :

>>> df.groupby("Student").tail(3).groupby("Student")["Score"].mean() 
Student 
Bill  0.513128 
Bob  0.342806 
Joe  0.469662 
Name: Score, dtype: float64 
+0

을 나는 두번째 방법은 큰 세트에 대한 훨씬 더 빨리 될 것입니다 의심 – Jeff

관련 문제