0

I am trying to shorten my code in a very repetitive task, which is seasonally adjusting a bunch of series in pandas. The code I am using (and works) is

pibsa_andalucia = sm.tsa.x13_arima_analysis(endog = ccaa[ccaa['region'] == 'Andalucia']['rpib'].dropna(),
                                x12path = path_to_x13, prefer_x13 = True, freq = "Q") 
pibsa_galicia = sm.tsa.x13_arima_analysis(endog = ccaa[ccaa['region'] == 'Galicia']['rpib'].dropna(),
                                x12path = path_to_x13, prefer_x13 = True, freq = "Q") 
pibsa_cantabria = sm.tsa.x13_arima_analysis(endog = ccaa[ccaa['region'] == 'Cantabria']['rpib'].dropna(),
                                x12path = path_to_x13,prefer_x13 = True, freq = "Q") 
pibsa_cataluna  = sm.tsa.x13_arima_analysis(endog = ccaa[ccaa['region'] == 'Cataluna']['rpib'].dropna(),
                                x12path = path_to_x13,prefer_x13 = True, freq = "Q") 
pibsa_larioja   = sm.tsa.x13_arima_analysis(endog = ccaa[ccaa['region'] == 'La Rioja']['rpib'].dropna(),
                                x12path = path_to_x13,prefer_x13 = True, freq = "Q") 
pibsa_madrid    = sm.tsa.x13_arima_analysis(endog = ccaa[ccaa['region'] == 'Madrid']['rpib'].dropna(),
                                x12path = path_to_x13,prefer_x13 = True, freq = "Q") 
pibsa_navarra   = sm.tsa.x13_arima_analysis(endog = ccaa[ccaa['region'] == 'Navarra']['rpib'].dropna(),
                                x12path = path_to_x13,prefer_x13 = True, freq = "Q") 
pibsa_euskadi   = sm.tsa.x13_arima_analysis(endog = ccaa[ccaa['region'] == 'Euskadi']['rpib'].dropna(),
                                x12path = path_to_x13,prefer_x13 = True, freq = "Q") 
pibsa_espana    = sm.tsa.x13_arima_analysis(endog = ccaa[ccaa['region'] == 'Espana']['rpib'].dropna(),
                                x12path = path_to_x13,prefer_x13 = True, freq = "Q") 

The code that ideally would like to run is


regions = ['Andalucia', 'Cantabria', 'Cataluna', ... ]

for reg in regions:
    pibsa_'reg' = sm.tsa.x13_arima_analysis(endog = 
                     ccaa[ccaa['region'] == 'reg']['rpib'].dropna(),
                     x12path = path_to_x13, prefer_x13 = True, 
                     freq = "Q")  

I am new to python and not really sure if this is feasible Could anybody guide me in this issue.

Thanks

Jorge Alonso
  • 103
  • 11

1 Answers1

0

You can do something like this:

regions = ['Andalucia', 'Cantabria', 'Cataluna', ... ]
region_model_dict = {}
for reg in regions:
    region_model_dict[f'pibsa_{reg}'] = sm.tsa.x13_arima_analysis(endog = 
                     ccaa[ccaa['region'] == reg]['rpib'].dropna(),
                     x12path = path_to_x13, prefer_x13 = True, 
                     freq = "Q")  

After this you can use a necessary model like this:

model = region_model_dict['pibsa_Andalucia']
Andrey Lukyanenko
  • 3,679
  • 2
  • 18
  • 21
  • 1
    So, in other words it's a duplicate of [this question](https://stackoverflow.com/questions/1373164/how-do-i-create-a-variable-number-of-variables). – kaya3 Feb 23 '20 at 15:35
  • 1
    It is a duplicate indeed. My apologies for that but I am struggling so far with dictionaries so I did not understand. Your solution worked. Thank you all – Jorge Alonso Feb 23 '20 at 15:57