Search code examples
pythonpandasloopsfacebook-prophet

Create Forecasts Looping over SKUs and Export to CSV using Facebook Prophet


I am new to Python so please bear with me.

I am trying to convert what I think may be a nested dictionary into a csv that I can export. Below is my code:

import pandas as pd
import os 
from fbprophet import Prophet

# Read in File
df1 = pd.read_csv('File_Path.csv')

#Create Loop to Forecast Multiple SKUs
def get_prediction(df):
prediction = {}
df1 = df.rename(columns={'Date': 'ds','qty_ordered': 'y', 'item_no': 'item'})
list_items = df1.item.unique()

for item in list_items:
    item_df = df1.loc[df1['item'] == item]
    # set the uncertainty interval to 95% (the Prophet default is 80%)
    my_model = Prophet(yearly_seasonality= True, seasonality_prior_scale=1.0)
    my_model.fit(item_df)
    future_dates = my_model.make_future_dataframe(periods=12, freq='M')
    forecast = my_model.predict(future_dates)
    prediction[item] = forecast
return prediction

# Save predictions to dictionary
df2 = get_prediction(df1)

# Convert dictionary
df3 = pd.DataFrame.from_dict(df3, index='columns)

So the last part of the code is where I am struggling. I need to convert the df2 dictionary to a dataframe (df3) so I can export it to a csv. But it looks as if it is a nested dictionary? Not sure if I need to update my function or not.

This is what a snippet of the dictionary looks like enter image description here

I need to export it so it will look like this

enter image description here

Any help would be greatly appreciated!


Solution

  • The following code should help flattening df2 (dictionary of dataframes if I understand correctly).

    def flatten(dict_of_df):
        # insert column 'item'
        for key, value in dict_of_df.items():
            value['item'] = key
    
        # return vertically concatenated dataframe with all the items
        return pd.concat(dict_of_df.values())