首页 > 解决方案 > 在 pandas 中用 group by 取最后 n 个元素的平均值

问题描述

我有一个熊猫数据框 df 作为:

Time    Type    Value
1/15/2019   A   109.99
1/16/2019   A   108.47
1/17/2019   A   107.71
1/18/2019   A   109.23
1/21/2019   A   109.23
1/22/2019   A   108.47
1/23/2019   A   110.75
1/24/2019   A   112.27
2/4/2019    B   172.1
2/5/2019    B   170.55
2/6/2019    B   170.55
2/7/2019    B   171.79
2/8/2019    B   172.41
2/11/2019   B   174.89
2/12/2019   B   176.15
2/13/2019   B   174.09
2/14/2019   B   171.05

我想从上面得到每种类型的最后 3 个值的平均值,如下所示:

Type Last3Avg
A    110.50
B    173.56

average(108.47, 110.75, 112.27) = 110.50等。

我正在尝试各种语法来关注但没有成功:

df.groupby('Type').ix[-3:].mean()

标签: pythonpandas

解决方案


让我们尝试groupbyapply。取最后 3 行并找到它们的平均值。

df.groupby('Type').apply(lambda x: x.tail(3).mean())

           Value
Type            
A     110.496667
B     173.763333

同样,你也可以这样做

df.groupby('Type').tail(3).groupby('Type').mean()

           Value
Type            
A     110.496667
B     173.763333

推荐阅读