熊猫 groupby 最后 n

use*_*196 2 python group-by pandas

使用pandas groupby获得最后n个实例的平均值的最佳方法是什么?

例如我有一个这样的数据框:

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

我如何获得每个学生的最后 3 个分数的平均值。

DSM*_*DSM 6

也许是这样的?

>>> 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
Run Code Online (Sandbox Code Playgroud)

您可以使用 访问最后三个(或更少)元素.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
Run Code Online (Sandbox Code Playgroud)