我有每周销售数据框架
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
我在循环中遇到问题,无法找出正确的脚本。因此,将感谢您的帮助。
答案 0 :(得分:4)
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
答案 1 :(得分:3)
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