有分组依据的尾随平均数或移动平均数

2024-10-05 11:38:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我想计算一个拖尾或移动平均数,同时进行分组。在下面的例子中,我演示了5天移动平均线。在

我的数据看起来像:

ID  Date         KG      Volume
1   8/10/2018    1,000   10 
1   8/11/2018    500     6 
1   8/12/2018    750     2 
1   8/13/2018    500     6 
1   8/13/2018    500     6 
1   8/14/2018    1,000   4 
2   8/1/2018     1304    8
2   8/2/2018     626     1
2   8/3/2018     955     3
2   8/8/2018     445     4
2   8/10/2018    1356    11
2   8/13/2018    524     7
2   8/14/2018    331     5

我想按ID和Date列分组,然后计算KG/体积列后面5天的平均值(从今天的日期算起,是8/10-8/14)。我需要按ID和Date分组的原因是像ID 1这样的情况,其中日期8/13/18出现了两次。在这个例子中,我希望在8/13/18的ID 1中有一个1000 KG的条目用于平均计算(而不是两个条目500)。在

预期产出如下:

^{pr2}$

另外,请注意,ID 2缺少平均计算所需的5天中的2天。在进行平均计算时,应将ID 2缺失的两天计算为0。这就是为什么体重平均值是442.2,而不是737。在

我尝试过使用.rolling(5).mean(),但在将其与groupby语句结合时,得到的结果不正确。在


Tags: 数据iddate情况体积条目原因例子
1条回答
网友
1楼 · 发布于 2024-10-05 11:38:51

首先,一些设置:

df.Date = pd.to_datetime(df.Date)
df.KG = df.KG.str.replace(',', '').astype(int)

现在groupbyDate和{}并求和重复天数:

^{pr2}$

接下来,要重新取样以说明“缺失”天数:

out = s.groupby('ID').resample('1D').asfreq().drop('ID', 1).reset_index(0).fillna(0)

最后,索引过去5天的数据帧,并使用mean

out.groupby('ID').tail(5).groupby('ID').mean()

        KG  Volume
ID
1.0  850.0     6.8
2.0  442.2     4.6

相关问题 更多 >

    热门问题