【发布时间】:2019-09-17 15:40:02
【问题描述】:
我有一个如下所示的 DataFrame:
f_period f_year f_month subject month year value
20140102 2014 1 a 1 2018 10
20140109 2014 1 a 1 2018 12
20140116 2014 1 a 1 2018 8
20140202 2014 2 a 1 2018 20
20140209 2014 2 a 1 2018 15
20140102 2014 1 b 1 2018 10
20140109 2014 1 b 1 2018 12
20140116 2014 1 b 1 2018 8
20140202 2014 2 b 1 2018 20
20140209 2014 2 b 1 2018 15
f_period 是对 SKU(subject 列)进行预测的日期。 month 和 year 列是进行预测的时期。例如,第一行表示在 01/02/2018 上,模型预测在月份 1 的年份 2018 中设置 10 产品单位 a。
我正在尝试通过subject、month 为 2 f_months 创建滚动平均预测。 DataFrame 应如下所示:
f_period f_year f_month subject month year value mnthly_avg rolling_2_avg
20140102 2014 1 a 1 2018 10 10 13
20140109 2014 1 a 1 2018 12 10 13
20140116 2014 1 a 1 2018 8 10 13
20140202 2014 2 a 1 2018 20 17.5 null
20140209 2014 2 a 1 2018 15 17.5 null
20140102 2014 1 b 1 2018 10 10 13
20140109 2014 1 b 1 2018 12 10 13
20140116 2014 1 b 1 2018 8 10 13
20140202 2014 2 b 1 2018 20 17.5 null
20140209 2014 2 b 1 2018 15 17.5 null
我尝试过的事情:
我能够通过以下方式获得mnthly_avg:
data_df['monthly_avg'] = data_df.groupby(['f_month', 'f_year', 'year', 'month', 'period', 'subject']).\
value.transform('mean')
我尝试获取rolling_2_avg:
rolling_monthly_df = data_df[['f_year', 'f_month', 'subject', 'month', 'year', 'value', 'f_period']].\
groupby(['f_year', 'f_month', 'subject', 'month', 'year']).value.mean().reset_index()
rolling_monthly_df['rolling_2_avg'] = rolling_monthly_df.groupby(['subject', 'month']).\
value.rolling(2).mean().reset_index(drop=True)
这给了我一个意想不到的输出。我不明白它是如何计算 rolling_2_avg 的值的
如何按subject 和month 分组,然后按f_month 排序,然后取接下来两个月的平均值?
【问题讨论】: