How would you optimize this python/pandas code?
It seems you just need to merge two DFs:

df = df.merge(indicadores[['estado','cidade','population']],
              leftt_on=['address_locality','address_region'],
              right_on=['estado','cidade','city'],
              how='left')


NOTE: usually you don't need to specify left_on and right_on if the "joining" columns have the same names in both DFs (Pandas will use all common (with same names) columns 
 from both DFs for joining/merging). But as i've seen from comments and from your question before you've edited it - it's not your case. So you would need to specify correct column names for left_on and right_on.

UPDATE: demo (using updated sample data sets):

In [7]: df
Out[7]:
   uf            city
0  mg        araguari
1  mg      uberlandia
2  sp       sao-paulo
3  go         goiania
4  mg  belo-horizonte

In [8]: indicators
Out[8]:
              city  uf  population
0     abadia-goias  go        6876
1  abadia-dourados  mg        6704
2         araguari  mg       19000
3           abaete  mg       22690
4       uberlandia  mg      700000

In [9]: df = df.merge(indicators,
   ...:               left_on=['city','uf'],
   ...:               right_on=['city','uf'],
   ...:               how='left')
   ...:

In [10]: df
Out[10]:
   uf            city  population
0  mg        araguari     19000.0
1  mg      uberlandia    700000.0
2  sp       sao-paulo         NaN
3  go         goiania         NaN
4  mg  belo-horizonte         NaN