您好,我正在尝试预测每个商店和商品的以下单位
df.head()
ds item store y
0 2019-01-13 A18-303 31 1.000
1 2021-02-21 104451-N04 3 2.000
2 2021-03-07 K231-G39 26 1.000
3 2021-01-10 K288-G39 26 -1.000
4 2019-06-30 A18-303 6 6.000
final = pd.DataFrame(columns=['item','store','ds','yhat'])
grouped = df.groupby('store','item')
for g in grouped.groups:
group = grouped.get_group(g)
m = Prophet()
m.fit(group)
future = m.make_future_dataframe(periods=14)
forecast = m.predict(future)
forecast['item','store'] = g
final = pd.concat([final, forecast], ignore_index=True)
我的结果是所有商店和商品均为 NaN。
这是因为您没有正确定义
final
数据框。
第一次运行
pd.concat([final, forecast], ignore_index=True)
时,final
仍然是未定义的,因此会产生错误。
您可以执行以下操作:
grouped = df.groupby(['store','item'])
dfs =[] # list of dataframes
for g in grouped.groups:
group = grouped.get_group(g)
m = Prophet()
m.fit(group)
future = m.make_future_dataframe(periods=14)
forecast = m.predict(future)
forecast['item','store'] = g
dfs.append(forecast)
final = pd.concat(dfs, ignore_index=True)
我意识到这是一篇旧帖子,但它对我的用例很有帮助(按商店、按国家/地区进行预测)。您可以使用列表理解并访问 g 的索引,在附加到最终之前将它们单独添加到预测 df 中,如下所示:
final = pd.DataFrame(columns=['item','store','ds','yhat'])
grouped = df.groupby('store','item')
for g in grouped.groups:
group = grouped.get_group(g)
m = Prophet()
m.fit(group)
future = m.make_future_dataframe(periods=14)
forecast = m.predict(future)
forecast['store'] = g[0]
forecast['item'] = g[1]
final = pd.concat([final, forecast], ignore_index=True)