如果您需要mean for last 3 then just replace 2 by 3,下面的代码提供了最后两次出现的平均值
三个选项
第一
df.groupby(['cat1', 'cat2'], as_index=False, sort=False).apply(lambda x: x.tail(2).mean())
将 val col 输出为浮点数
cat1 cat2 val
0 A X 7.0
1 A Y 8.0
2 B Z 9.0
3 B M 10.0
第二
grouped = df.groupby(['cat1', 'cat2'],sort=False)
grouped.nth([-1,-2]).groupby(['cat1', 'cat2'], sort=False).val.mean().reset_index()
第三
df.groupby(['cat1', 'cat2'], sort=False).tail(2).groupby(['cat1', 'cat2'], sort=False).mean().reset_index()
将 val col 输出为 int
cat1 cat2 val
0 A X 7
1 A Y 8
2 B Z 9
3 B M 10
编辑
最后 3 个平均值
df.groupby(['cat1', 'cat2'], sort=False).tail(3).groupby(['cat1', 'cat2'],
sort=False).mean().reset_index().rename(columns={'val':'mean_of_last_three'})
cat1 cat2 mean_of_last_three
0 A X 5
1 A Y 6
2 B Z 7
3 B M 8
最近 2 次的平均值
df.groupby(['cat1', 'cat2'], sort=False).tail(2).groupby(['cat1', 'cat2'],
sort=False).mean().reset_index().rename(columns={'val':'mean_of_last_two'})
cat1 cat2 mean_of_last_two
0 A X 7
1 A Y 8
2 B Z 9
3 B M 10