La desocupación desde 2007#
La serie mensual de la tasa de desocupación del total nacional, y por qué hay que tener cuidado al compararla entre marcos muestrales.
import dane_data as dd
serie = dd.geih.serie_indicadores(range(2007, 2027), anual=False)
serie["fecha"] = pd.to_datetime(serie[["anio", "mes"]].rename(columns={"anio": "year", "mes": "month"}).assign(day=1))
serie["marco"] = [dd.geih.marco_muestral(a) for a in serie["anio"]]
serie[["fecha", "marco", "tgp", "to", "td"]].tail()
| fecha | marco | tgp | to | td | |
|---|---|---|---|---|---|
| 231 | 2026-04-01 | CNPV 2018 | 64.741220 | 59.055998 | 8.781457 |
| 232 | 2026-05-01 | CNPV 2018 | 64.942657 | 59.733833 | 8.020651 |
| 233 | 2026-06-01 | CNPV 2018 | 64.543037 | 59.362215 | 8.026926 |
| 234 | 2026-07-01 | CNPV 2018 | 64.768526 | 59.519311 | 8.104578 |
| 235 | 2026-08-01 | CNPV 2018 | 63.289540 | 57.363310 | 9.363680 |
dd.geih.serie_indicadores() calcula un año a la vez y guarda el resultado: veinte años sin cargar los
microdatos en memoria. dd.geih.marco_muestral() dice con qué proyecciones de población se expandió cada
año.
fig, ax = plt.subplots(figsize=(10, 4.4))
ax.plot(serie["fecha"], serie["td"], lw=1.2, alpha=0.45, label="Mensual")
ax.plot(serie["fecha"], serie["td"].rolling(12).mean(), lw=2.4, label="Promedio de 12 meses")
for inicio, fin in [("2020-01-01", "2020-12-31"), ("2022-01-01", serie["fecha"].max())]:
ax.axvspan(pd.Timestamp(inicio), pd.Timestamp(fin), color="0.5", alpha=0.12, lw=0)
ax.text(pd.Timestamp("2023-01-01"), 22.5, "Marco CNPV 2018", color="0.35", fontsize=10)
ax.annotate("Mayo de 2020", xy=(pd.Timestamp("2020-05-01"), serie.set_index("fecha").loc["2020-05-01", "td"]),
xytext=(pd.Timestamp("2014-06-01"), 20.5), arrowprops={"arrowstyle": "->", "color": "0.3"}, fontsize=10)
ax.yaxis.set_major_formatter(mtick.PercentFormatter(decimals=0))
ax.set_ylim(0, 25)
ax.set_title("Tasa de desocupación, total nacional, 2007–2026")
ax.legend(loc="upper left");
La desocupación bajó de entre 11 % y 12 % en 2007–2010 a entre 8,9 % y 10,5 % en 2014–2019, saltó al 22 % en mayo de 2020 con la pandemia y bajó del 10 % en 2025. La estacionalidad es fuerte: todos los años salvo 2020, enero es el mes con más desocupación.
Años completos#
anual = dd.geih.serie_indicadores(range(2007, 2026))
anual["marco"] = [dd.geih.marco_muestral(a) for a in anual["anio"]]
anual[["anio", "marco", "tgp", "to", "td"]].round(1)
| anio | marco | tgp | to | td | |
|---|---|---|---|---|---|
| 0 | 2007 | censo 2005 | 58.3 | 51.8 | 11.2 |
| 1 | 2008 | censo 2005 | 58.5 | 51.9 | 11.3 |
| 2 | 2009 | censo 2005 | 61.3 | 53.9 | 12.0 |
| 3 | 2010 | censo 2005 | 62.7 | 55.4 | 11.8 |
| 4 | 2011 | censo 2005 | 63.7 | 56.8 | 10.8 |
| 5 | 2012 | censo 2005 | 64.5 | 57.8 | 10.4 |
| 6 | 2013 | censo 2005 | 64.2 | 58.0 | 9.6 |
| 7 | 2014 | censo 2005 | 64.2 | 58.4 | 9.1 |
| 8 | 2015 | censo 2005 | 64.7 | 59.0 | 8.9 |
| 9 | 2016 | censo 2005 | 64.5 | 58.5 | 9.2 |
| 10 | 2017 | censo 2005 | 64.4 | 58.4 | 9.4 |
| 11 | 2018 | censo 2005 | 64.0 | 57.8 | 9.7 |
| 12 | 2019 | censo 2005 | 63.3 | 56.6 | 10.5 |
| 13 | 2020 | CNPV 2018 | 60.4 | 50.4 | 16.5 |
| 14 | 2021 | censo 2005 | 60.6 | 52.3 | 13.7 |
| 15 | 2022 | CNPV 2018 | 63.6 | 56.5 | 11.2 |
| 16 | 2023 | CNPV 2018 | 64.1 | 57.6 | 10.2 |
| 17 | 2024 | CNPV 2018 | 63.9 | 57.4 | 10.2 |
| 18 | 2025 | CNPV 2018 | 64.3 | 58.6 | 8.9 |
Dos marcos, dos niveles#
Los años 2010–2020 existen en las dos versiones: la serie principal (marco del censo 2005, salvo 2020) y la serie de empalme (marco del CNPV 2018, PET de 15 años o más). La tasa de desocupación cambia poco entre una y otra, pero la participación sí, porque cambian la población y la edad mínima de la PET:
principal = dd.geih.serie_indicadores(range(2010, 2021))
empalme = dd.geih.serie_indicadores(range(2010, 2021), empalme=True)
comparacion = principal[["anio", "tgp", "td"]].merge(empalme[["anio", "tgp", "td"]], on="anio",
suffixes=("_principal", "_empalme"))
comparacion.round(1)
| anio | tgp_principal | td_principal | tgp_empalme | td_empalme | |
|---|---|---|---|---|---|
| 0 | 2010 | 62.7 | 11.8 | 67.7 | 12.0 |
| 1 | 2011 | 63.7 | 10.8 | 68.1 | 11.1 |
| 2 | 2012 | 64.5 | 10.4 | 68.6 | 10.6 |
| 3 | 2013 | 64.2 | 9.6 | 67.8 | 9.9 |
| 4 | 2014 | 64.2 | 9.1 | 67.4 | 9.4 |
| 5 | 2015 | 64.7 | 8.9 | 67.5 | 9.2 |
| 6 | 2016 | 64.5 | 9.2 | 66.9 | 9.5 |
| 7 | 2017 | 64.4 | 9.4 | 66.4 | 9.7 |
| 8 | 2018 | 64.0 | 9.7 | 65.7 | 10.0 |
| 9 | 2019 | 63.3 | 10.5 | 64.8 | 10.9 |
| 10 | 2020 | 60.4 | 16.5 | 60.4 | 16.5 |
fig, axes = plt.subplots(1, 2, figsize=(10, 3.8))
for ax, tasa, titulo in zip(axes, ["tgp", "td"], ["Participación (TGP)", "Desocupación (TD)"]):
ax.plot(comparacion["anio"], comparacion[f"{tasa}_principal"], marker="o", label="Serie principal")
ax.plot(comparacion["anio"], comparacion[f"{tasa}_empalme"], marker="o", label="Serie de empalme")
ax.yaxis.set_major_formatter(mtick.PercentFormatter(decimals=0))
ax.set_title(titulo)
axes[0].legend()
fig.tight_layout();
Para una serie larga comparable con los años recientes, use la serie de empalme hasta 2020 y la principal desde 2022:
comparable = pd.concat([
dd.geih.serie_indicadores(range(2010, 2021), empalme=True),
dd.geih.serie_indicadores(range(2022, 2026)),
], ignore_index=True)
comparable[["anio", "tgp", "to", "td"]].round(1)
| anio | tgp | to | td | |
|---|---|---|---|---|
| 0 | 2010 | 67.7 | 59.6 | 12.0 |
| 1 | 2011 | 68.1 | 60.6 | 11.1 |
| 2 | 2012 | 68.6 | 61.3 | 10.6 |
| 3 | 2013 | 67.8 | 61.1 | 9.9 |
| 4 | 2014 | 67.4 | 61.1 | 9.4 |
| 5 | 2015 | 67.5 | 61.3 | 9.2 |
| 6 | 2016 | 66.9 | 60.5 | 9.5 |
| 7 | 2017 | 66.4 | 60.0 | 9.7 |
| 8 | 2018 | 65.7 | 59.1 | 10.0 |
| 9 | 2019 | 64.8 | 57.7 | 10.9 |
| 10 | 2020 | 60.4 | 50.4 | 16.5 |
| 11 | 2022 | 63.6 | 56.5 | 11.2 |
| 12 | 2023 | 64.1 | 57.6 | 10.2 |
| 13 | 2024 | 63.9 | 57.4 | 10.2 |
| 14 | 2025 | 64.3 | 58.6 | 8.9 |
Ver también
Las encuestas: marcos muestrales y serie de empalme.
dane-data frente a las cifras del DANE: estas cifras frente a las que publica el DANE.