使用pandas按组对最后n个元素取平均值

5

I have a pandas dataframe df as:

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()
2个回答

6

让我们尝试使用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

你的第二种方法需要我更改代码的次数较少。谢谢。 - Corey Levinson

4

使用 nth 的新方法

df.groupby('Type').nth([-1,-2,-3]).Value.mean(axis=0,level=0)
Out[250]: 
Type
A    110.496667
B    173.763333
Name: Value, dtype: float64

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接