I have a pandas dataframe
which list items, locations they are sold in, and the models that gave said items the lowest mape out of all models ran.
Here is a sample of what this df looks like.
import pandas as pd
model = ['autoarima', 'prophet', 'TES']
item = ['102354','215898','302584']
MAPE = [46.2, 23.5, 15.6]
location = ['KR_DC', 'KR_DC','KR_DC']
df_dict = {'fcast_item':item, 'location':location, 'mape':MAPE, 'best_model':model}
df = pd.DataFrame.from_dict(df_dict)
I would like to use the value for model
to call that model's function which is stored in a class and run the function which returns a dataframe.
For example, if the model is 'TES', then I'd like the following line of code ran:
df = [statmod.stats_models(df).tesa_model(target='corrected_demand', combo = combo, length=length_) for combo in combos]
If the model is autoarima
then the following would be ran
df = [statmod.stats_models(df).arima_model(target='corrected_demand', combo = combo, length=length_) for combo in combos]
If it helps, the following will always be the same:
df = [statmod.stats_models(df).
as well as (target='corrected_demand', combo = combo, length=length_) for combo in combos]
. Only the middle, where the model function itself is located would change.
I've never done this type of dynamic coding where a dataframe value calls a line of code to run. Is this possible?
You can try to use Python's built-in exec
function, along with f-strings, whenever I have to do some dynamic coding like I use this (I'm not an expert Python programmer, so there might be a more efficient way to solve this type of problem)
Here is an example code:
exec(f"new_dataframe = statmod.stats_models(df).{"Your model name here"}_model(target='corrected_demand', combo = combo, length=length_) for combo in combos")
You might have to do some processing to your model values obtained through the original df or change the values in those df to match the function name. (Eg: df value is "autoarima" but your function name is "arima_model", so giving this value to the exec function will "autoarima_model")