首页 > 解决方案 > 如何计算 n 行的平均值并将答案粘贴到 pandas 列的下 n 行?

问题描述

我有一个每周销售数据框

Sales           weekNum 
83                    1 
139                   2 
207                   3 
278                   4 
274                   5 
291                   6 
319                   7 
305                   8 

我想计算前 4 周的平均值并将其粘贴到第 5 到第 8 周的索引中

我希望我的输出数据集如下所示

Sales   weekNum   4-PreviousWeekAverage
83            1 
139           2 
207           3 
278           4 
274           5          176.75
291           6          176.75
319           7          176.75
305           8          176.75

同样,我也想计算 8 周平均值并将其粘贴到 5 到 8 的索引中

我试过了

for i in [4, 8]:
    newColumnName1 = '%s-PreviousWeekAverage' % i
    df[newColumnName1] = np.nan


    for ix in df.index:
        if ix - i >= 0:

            df.loc[ix, newColumnName1] = np.mean(sampledf.loc[ix-i:ix-1,'Sales'])

然而,它返回我的移动平均线如下

Sales   weekNum 4-PreviousWeekAverage
83           1  
139          2  
207          3  
278          4  
274          5            176.75
291          6            224.5
319          7            262.5
305          8            290.5

我在循环时遇到问题,无法找出正确的脚本。因此将感谢您的帮助。

标签: pythonpandasloopsmoving-average

解决方案


groupby在 weekNum 和transformby mean

df.groupby((df.weekNum - 1) // 4).Sales.transform('mean').shift(4)

0       NaN
1       NaN
2       NaN
3       NaN
4    176.75
5    176.75
6    176.75
7    176.75
Name: Sales, dtype: float64

推荐阅读