dd.tabla#

dane_data.tabla(df, por=None, variable=None, estadistico='total', peso='fex')[fuente]#

Tabla ponderada de cualquier variable.

Expande la muestra con el factor de expansión y, si hay varios meses de un mismo año, convierte los totales en promedios mensuales, como el DANE. Sirve para la GEIH y para cualquier otra tabla con pesos.

Parámetros:
  • df (DataFrame) – Microdatos, una fila por persona (por ejemplo, de dd.geih.load).

  • por (str | Iterable[str] | None) – Variable o lista de variables que definen los grupos. Sin por, una sola fila con todo df.

  • variable (str | None) – Variable numérica para "media" y "mediana". Las filas donde está vacía se descartan también con "total" y "porcentaje".

  • estadistico (str) – "total": personas (promedio mensual) en cada grupo. "porcentaje": distribución de la última variable de por dentro de las demás; por ejemplo, con por=["anio", "sexo"], el porcentaje de cada sexo en cada año. "media" o "mediana": de variable, ponderadas, en cada grupo.

  • peso (str | None) – Columna del factor de expansión. None cuenta observaciones sin expandir.

Devuelve:

Una fila por grupo con las columnas de por, el estadístico (total, porcentaje, media o mediana; "porcentaje" trae también total) y n_muestra, el número de observaciones sin expandir.

Tipo del valor devuelto:

DataFrame

Muestra:

ValueError – Si estadistico no es uno de los cuatro, o falta variable para la media o la mediana.

Ver también

dane_data.geih.serie_tabla

La misma tabla para muchos años, sin cargarlos en memoria.

weighted_mean

Media ponderada de una sola serie.

weighted_quantile

Cuantil ponderado de una sola serie.

Notas

Con pocas observaciones las cifras expandidas no son confiables: revise n_muestra y desconfíe de los grupos con menos de unas 30 a 100 personas.

La mediana es la de weighted_quantile (el menor valor que acumula la mitad del peso).

Ejemplos

Dos meses de una muestra con seis personas. Cada total es el promedio de los dos meses:

>>> import pandas as pd
>>> import dane_data as dd
>>> df = pd.DataFrame({
...     "anio": 2024, "mes": [1, 1, 1, 2, 2, 2],
...     "sexo": ["Mujer", "Hombre", "Mujer", "Mujer", "Hombre", "Hombre"],
...     "ingreso": [1.2, 2.0, 1.5, 1.3, 2.2, 1.8],
...     "fex": [100.0, 150.0, 50.0, 120.0, 90.0, 110.0],
... })
>>> dd.tabla(df, por="sexo")
     sexo  total  n_muestra
0  Hombre  175.0          3
1   Mujer  135.0          3
>>> dd.tabla(df, por="sexo", estadistico="porcentaje").round(1)
     sexo  total  n_muestra  porcentaje
0  Hombre  175.0          3        56.5
1   Mujer  135.0          3        43.5
>>> dd.tabla(df, por="sexo", variable="ingreso", estadistico="mediana")
     sexo  mediana  n_muestra
0  Hombre      2.0          3
1   Mujer      1.3          3

Con la GEIH:

>>> df = dd.geih.load(2024)
>>> dd.tabla(df, por=["anio", "nivel_educativo"], estadistico="porcentaje")
>>> dd.tabla(df[df.ocupado == 1], por="sexo", variable="ingreso_laboral", estadistico="mediana")