Python 如何计算每个产品的滚动平均值?
我在pandas中有数据帧中的前三列。我想计算每个产品的3天移动平均值,如第4列所示 资料 我尝试使用groupby和rolling mean,但似乎不起作用Python 如何计算每个产品的滚动平均值?,python,pandas,pandas-groupby,Python,Pandas,Pandas Groupby,我在pandas中有数据帧中的前三列。我想计算每个产品的3天移动平均值,如第4列所示 资料 我尝试使用groupby和rolling mean,但似乎不起作用 df['mov_avg'] =df.set_index('Date').groupby('Product').rolling('Demand',window=7).mean().reset_index(drop=True) 使用: 您的解决方案应通过滚动(3,freq='d')进行更改: 另一个更好的解决方案是使用: df['mov_
df['mov_avg'] =df.set_index('Date').groupby('Product').rolling('Demand',window=7).mean().reset_index(drop=True)
使用:
您的解决方案应通过滚动(3,freq='d')
进行更改:
另一个更好的解决方案是使用:
df['mov_avg'] =df.set_index('Date').groupby('Product').rolling('Demand',window=7).mean().reset_index(drop=True)
df['Date'] = pd.to_datetime(df['Date'], format='%d-%b-%y')
#sorting if not sorted DataFrame by both columns
df = df.sort_values(['Date','Product']).reset_index(drop=True)
df['mov_avg'] = (df.set_index('Date')
.groupby('Product')['Demand']
.rolling(3, freq='d')
.mean()
.reset_index(drop=True))
s = df.set_index('Date').groupby('Product')['Demand'].rolling(3, freq='d').mean()
df = df.join(s.rename('mov_avg'), on=['Product','Date'])
print (df)
Date Product Demand mov Avg mov_avg
0 2019-01-01 Product-01 3 NaN NaN
1 2019-01-02 Product-01 4 NaN NaN
2 2019-01-03 Product-01 5 4.0 4.000000
3 2019-01-04 Product-01 6 5.0 5.000000
4 2019-01-05 Product-01 7 6.0 6.000000
5 2019-01-03 Product-02 2 NaN NaN
6 2019-01-04 Product-02 3 NaN NaN
7 2019-01-05 Product-02 4 3.0 3.000000
8 2019-01-06 Product-02 5 4.0 4.000000
9 2019-01-07 Product-02 8 5.7 5.666667