如何计算 n 行的平均值并将答案粘贴到 pandas 列的下 n 行?

How to compute the average of n rows and paste the answer to next n rows of pandas column?

我有一个每周销售数据框

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'])

然而 returns 我的移动平均线如下

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

我在循环时遇到问题,无法找到正确的脚本。因此将不胜感激。

groupby 在 weekNum 和 transform 通过 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

IIUC

df.at[4:,'4-PreviousWeekAverage']=df.Sales.iloc[:4].mean()
df
Out[344]: 
   Sales  weekNum  4-PreviousWeekAverage
0     83        1                    NaN
1    139        2                    NaN
2    207        3                    NaN
3    278        4                    NaN
4    274        5                 176.75
5    291        6                 176.75
6    319        7                 176.75
7    305        8                 176.75