使用pandas groupby获取最后n个实例的平均值的最佳方法是什么?
例如,我有一个这样的数据框:
frame = pd.DataFrame({'Student' : ['Bob', 'Bill', 'Bob', 'Bob', 'Bill', 'Joe', 'Joe', 'Bill', 'Bob', 'Joe'],
'Score' : np.random.random(10)})
如何获得每位学生最后3分的平均值。
答案 0 :(得分: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