• Saltar al contenido principal
  • Skip to secondary menu
  • Saltar a la barra lateral principal
  • Saltar al pie de página
  • Inicio
  • Secciones
    • Ciencia de datos
    • Criptografía
    • Herramientas
    • Machine Learning
    • Noticias
    • Opinión
    • Productividad
    • Programación
      • JavaScript
      • Julia
      • Matlab
      • Python
      • R
  • Programación
    • JavaScript
    • Julia
    • Matlab
    • Python
    • R
  • Laboratorio
    • Estadística
      • Calculadora del Tamaño Muestral en Encuestas
      • Calculadora de estadísticos descriptivos
      • Test de normalidad
      • Calculadora de contrastes de hipotesis
      • Calculadora de tamano del efecto
      • Simulador de Regresión Lineal con Ruido
      • Visualizador de PCA
      • Visualizador de Series Temporales
      • Simulador de Regresión Logística
      • Simulador de K-Means
      • Simulador de DBSCAN
      • Detector de la Ley de Benford
    • Probabilidad
      • Calculadora de Probabilidad de Distribuciones
      • Calculadora de Probabilidades de Lotería
      • Simulador del Problema de Monty Hall
      • Simulador de la Estrategia Martingala
    • Finanzas
      • Calculadora de Préstamos e Hipotecas
      • Conversor TIN ↔ TAE
      • Calculadora DCA con ajuste por inflación
      • Calculadora XIRR con Flujos Irregulares
      • Simulador FIRE (Financial Independence, Retire Early)
    • Riesgo
      • Constructor de Scorecards de Crédito
      • Aplicar Scorecard de Crédito
    • Herramientas
      • Formateador / Minificador de JSON
      • Conversor CSV ↔ JSON
      • Comparador y Formateador de Texto y JSON
      • Formateador y Tester de Expresiones Regulares
      • Inspector de JWT
      • Generador y verificador de hashes
      • Codificador / Decodificador Base64 y URL
      • Conversor de bases numericas
      • Conversor de Timestamp Unix
      • Conversor de colores
      • Generador de UUIDs
    • Juegos
      • Tres en Raya
      • Nim con Q-Learning
    • Más
      • Método D’Hondt
      • Generador de Contraseñas Seguras
  • Noticias
  • Boletín
  • Contacto
  • Tienda
    • Libros
    • Equipamiento de oficina
    • Equipamiento en movilidad

Analytics Lane

Ciencia e ingeniería de datos aplicada

  • Ciencia de datos
  • Machine Learning
  • IA Generativa
  • Python
  • Pandas
  • NumPy
  • R
  • Excel

El método D’Hondt y su implementación en Python

septiembre 15, 2023 Por Daniel Rodríguez Deja un comentario
Tiempo de lectura: 7 minutos

En los sistemas de representación proporcional es necesario asignar a cada uno de los partidos o listas electorales un número de escaños en función de los votos recibidos. Uno de los métodos más utilizados es el método D’Hondt. Su objetivo es distribuir los escaños de manera proporcional a los votos obtenidos por cada partido o lista electoral. En esta entrada se verá en qué consiste el método D’Hondt y como se puede implementar en Python una función para asignar los escaños.

Fundamentos del método D’Hondt

El método D’Hondt, también conocido como el sistema D’Hondt, fue desarrollado por el matemático belga Victor D’Hondt a finales del siglo XIX. Siendo un método ampliamente utilizado en la actualidad en diferentes sistemas electorales. El objetivo del método D’Hondt es encontrar una manera de distribuir los escaños de manera justa y proporcional en un parlamento en función de los votos obtenidos por cada uno de los partidos o listas electorales.

El procedimiento para asignar los escaños según el método D’Hondt es:

  1. Votos obtenidos por cada partido: Primero, se recopilan los resultados electorales y se cuentan los votos obtenidos por cada partido o lista electoral.
  2. Divisor inicial: El método D’Hondt utiliza un divisor inicial que se ajusta durante el proceso de asignación de escaños. El divisor inicial es el número 1.
  3. Cálculo de cocientes: Se divide el número de votos obtenidos por cada partido entre el divisor actual para obtener un cociente. Este cociente representa cuántas veces el partido ha superado el divisor. \textrm {Cociente} = \frac{\textrm{Votos del partido}}{\textrm{Divisor actual}}
  4. Asignación de escaños: El escaño se asigna al partido que tenga el cociente más alto en cada ronda. Es decir, el partido que haya obtenido más votos en relación con el divisor actual. Ese partido recibe un escaño.
  5. Actualización del divisor: Después de asignar un escaño, se actualiza el divisor para el siguiente cálculo. El divisor se modifica dividiendo los votos obtenidos por cada partido entre el número de escaños que ya ha recibido más uno. \textrm{Divisor actualizado} = \frac{\textrm{Votos del partido}}{\textrm{Esca~nos asignados} + 1}
  6. Repetición del proceso: Los pasos 3 al 5 se repiten hasta que se asignan todos los escaños disponibles.

A medida que se asignan escaños, los cocientes de los partidos cambian, lo que afecta a la asignación de los escaños en las rondas posteriores.

Nuevo conversor de timestamp Unix en el laboratorio de Analytics Lane
En Analytics Lane
Nuevo conversor de timestamp Unix en el laboratorio de Analytics Lane

Implementación en Python

El método D’Hondt se puede implementar fácilmente en Python mediante una función que solamente necesita el número de votos de cada partido en una lista y los escaños a repartir. Obteniendo como resultado el número de escaños asignados a cada partido. Una posible implementación de esta función puede ser la que se muestra a continuación.

def dhondt_method(votes, num_seats):
    """
    Método para aplicar el método D'Hondt y obtener la asignación de escaños.

    Parámetros
    ----------
        votes : array-like, shape (num_parties, )
            Una lista o array con los votos obtenidos por cada partido.
            
        num_seats : int
            Número total de escaños a asignar.

    Retorna
    -------
        seats : array, shape (num_parties,)
            Una lista con el número de escaños asignados a cada partido.
    """
    num_parties = len(votes)

    # Inicializar la asignación de escaños a cero
    seats = [0] * num_parties

    # Realizar el proceso de asignación de escaños
    for _ in range(num_seats):
        max_index = max(range(num_parties), key=lambda i: votes[i] / (seats[i] + 1))
        seats[max_index] += 1

    return seats

En esta función primero se calcula el número de partidos a partir de la lista de votos. Una vez hecho esto se crea una lista en la que se cargará el número de asientos asignados a cada uno de los partidos o listas electorales. Posteriormente se inicia un bucle en el que en cada iteración se asignará el escaño a la lista con el resto más alto.

Ahora se puede ejecutar el código para ver cómo se reparten diferentes número de escaños entre varios partidos o listas electorales.

votes = [15000, 12000, 8000, 6000, 2000, 1200]

print(dhondt_method(votes, 4))
print(dhondt_method(votes, 10))
print(dhondt_method(votes, 35))
[2, 1, 1, 0, 0, 0]
[4, 3, 2, 1, 0, 0]
[12, 10, 6, 5, 1, 1]

El método D’Hondt en España

En España, al igual que en otros países, las leyes electorales aplican el método D’Hondt con ciertas peculiaridades que pueden afectar los resultados electorales. Las dos más importantes son:

  • Circunscripciones provinciales: El sistema electoral español usa las provincias como circunscripciones electorales independientes para la asignación de los escaños. Esto significa que los escaños se asignan en función de los resultados obtenidos por separado en cada provincia y no en todo el territorio. Salvo en las elecciones europeas donde existe una única circunscripción para todo el territorio. Esta peculiaridad no afecta a la función implementada, solamente se tiene que ejecutar para cada una de las circunscripciones. Aunque sí que afecta a la proporcionalidad final de los escaños asignados.
  • Umbral electoral mínimo: En España, existe un umbral electoral mínimo para poder obtener representación parlamentaria. Para acceder a los escaños, un partido o lista electoral debe superar un determinado porcentaje de votos a nivel de cada circunscripción. En las elecciones generales, el umbral es del 3% de los votos válidos emitidos, incluyendo en el recuento de votos válidos en blanco. Para algunas elecciones autonómicas el umbral de votos puede subir al 5%. Esta peculiaridad hace necesario incluir unos cambios en la función anterior.

Publicidad


Modificación de la función de Python para España

Para adaptar la función a las peculiaridades de la ley electoral española solamente se deben incluir dos parámetros: los votos en blanco y el umbral. Con ambos valores se puede descartar aquellos partidos que no pasan el corte y no entran en el reparto de escaños. Una función modificada se puede ver en el siguiente código.

def dhondt_method_spain(votes, num_seats, blank_votes, threshold=0.03):
    """
    Método para aplicar el método D'Hondt y obtener la asignación de escaños en
    el sistema electoral español.

    Parámetros
    ----------
        votes : array-like, shape (num_parties,)
            Una lista o array con los votos obtenidos por cada partido.
            
        num_seats : int
            Número total de escaños a asignar.
            
        blank_votes : int
            Número total de votos en blanco emitidos
            
        threshold : float, opcional
            El umbral electoral en decimal (por ejemplo, 0.03 para 3%).
            Por defecto, se asume un umbral del 3%.

    Retorna
    -------
        seats : array, shape (n_parties,)
            Una lista con el número de escaños asignados a cada partido.
    """
    num_parties = len(votes)

    # Aplicar el umbral electoral y obtener los partidos que superan el umbral
    total_votes = sum(votes) + blank_votes
    valid_parties = [i for i in range(num_parties) if votes[i] / total_votes >= threshold]

    # Inicializar la asignación de escaños a cero para todos los partidos
    seats = [0] * num_parties

    # Realizar el proceso de asignación de escaños
    for _ in range(num_seats):
        max_index = max(valid_parties, key=lambda i: votes[i] / (seats[i] + 1))
        seats[max_index] += 1

    return seats

La única modificación es la selección de los partidos válidos como aquellos que superan el umbral mínimo del 3% de voto sobre el total. Los que no superan este umbral se eliminan del reparto. Ahora se puede ver cómo afecta este cambio al reparto de escaños.

print(dhondt_method_spain(votes, 4, 1000))
print(dhondt_method_spain(votes, 10, 1000))
print(dhondt_method_spain(votes, 35, 1000))
[2, 1, 1, 0, 0, 0]
[4, 3, 2, 1, 0, 0]
[13, 10, 6, 5, 1, 0]

Tal como se puede apreciar en el ejemplo, respecto a cuando no se fija un umbral mínimo de votos para entrar en el reparto de escaños, sólo afecta a los resultados cuando el número de escaños es relativamente alto. Cuando la cantidad de escaños es inferior a 30, el propio funcionamiento del método D’Hondt exige un umbral mayor. En el ejemplo se puede ver como el último partido o lista electoral pierde el escaño por no alcanzar el 3%, incluyendo el voto el blanco solo alcanza un 2,6%. Escaño que en este caso se le asigna a la lista más votada.

El voto en blanco también puede afectar a los resultados, ya que esto puede hacer que algún partido se quede fuera del reparto. Esto se puede ver en el siguiente ejemplo.

print(dhondt_method_spain(votes, 4, 30000))
print(dhondt_method_spain(votes, 10, 30000))
print(dhondt_method_spain(votes, 35, 30000))
[2, 1, 1, 0, 0, 0]
[4, 3, 2, 1, 0, 0]
[13, 10, 7, 5, 0, 0]

Ahora el penúltimo partido o lista electoral también pierde el escaño debido al voto en blanco. Con 1000 votos en blanco esta tenía un 4,4% de los votos, pero si los votos en blanco son 30.000 solo tendrá un 2,6%, por lo que sale del reparto. En este caso es la tercera lista la que obtiene el escaño de esta.

Conclusiones

El método D’Hondt es ampliamente utilizado para repartir los escaños de forma proporcional en diferentes sistemas electorales. En esta entrada se ha visto como se puede implementar en Python e incluir las modificaciones necesarias para utilizarlo con las peculiaridades de las leyes electorales españolas. Para aquellos que quieran una implementación del método en Excel pueden consultar la siguiente publicación.

Aunque el método D’Hondt es uno de los más utilizados, el concepto de asignación proporcional de escaños no es exclusivo de él. Existen otros métodos, como el método Sainte-Laguë o el método Hare-Niemeyer, que también se utilizan para lograr un reparto proporcional de escaños en diferentes sistemas electorales.

Imágenes: Unsplash (Arnaud Jaegers)

¿Te ha parecido de utilidad el contenido?

¡Puntúalo entre una y cinco estrellas!

Puntuación promedio 0 / 5. Votos emitidos: 0

Ya que has encontrado útil este contenido...

¡Síguenos en redes sociales!

¡Siento que este contenido no te haya sido útil!

¡Déjame mejorar este contenido!

Dime, ¿cómo puedo mejorar este contenido?

Publicaciones relacionadas

  • Nuevo conversor de timestamp Unix en el laboratorio de Analytics Lane
  • Lanzamiento de la versión 1.0 del laboratorio de Analytics Lane con nuevas herramientas de scoring
  • ¡Analytics Lane cumple ocho años!
  • Analytics Lane lanza una Calculadora de Rentabilidad con Flujos Irregulares basada en TIR (XIRR)
  • Analytics Lane lanza un Conversor CSV ↔ JSON para transformar datos en tiempo real
  • Analytics Lane lanza un nuevo Formateador y Tester de Expresiones Regulares para desarrolladores
  • Analytics Lane lanza su Visualizador de Series Temporales: entiende tendencia, estacionalidad y ruido de forma visual e interactiva
  • Analytics Lane lanza su Conversor de Bases Numéricas: entiende cómo trabajan los ordenadores a nivel de bits
  • Analytics Lane lanza su Conversor TIN ↔ TAE: la herramienta definitiva para entender el coste real de depósitos, préstamos e hipotecas

Publicado en: Ciencia de datos Etiquetado como: Elecciones

Interacciones con los lectores

Deja una respuesta Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

I accept the Terms and Conditions and the Privacy Policy

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Barra lateral principal

Suscríbete a nuestro boletín

Suscríbete al boletín semanal para estar al día de todas las publicaciones.

Política de Privacidad

Analytics Lane en redes sociales

  • Amazon
  • Bluesky
  • Facebook
  • GitHub
  • Instagram
  • Mastodon
  • Pinterest
  • RSS
  • Telegram
  • Tumblr
  • Twitter
  • YouTube

Publicidad

Entradas recientes

Noticias

Lanzamiento de la versión 1.0 del laboratorio de Analytics Lane con nuevas herramientas de scoring

mayo 2, 2026 Por Daniel Rodríguez

Analytics Lane

¡Analytics Lane cumple ocho años!

mayo 2, 2026 Por Daniel Rodríguez

Analytics Lane lanza una Calculadora de Rentabilidad con Flujos Irregulares basada en TIR (XIRR)

mayo 1, 2026 Por Daniel Rodríguez

Publicidad

Es tendencia

  • JSON en bases de datos: cuándo es buena idea y cuándo no publicado el febrero 24, 2026 | en Ciencia de datos
  • Cómo Interpretar las Métricas de Fondos de Inversión y ETFs: Guía Completa para Tomar Decisiones Informadas publicado el noviembre 25, 2025 | en Ciencia de datos
  • Web del proyecto HeidiSQL HeidiSQL: administrador de base de datos publicado el diciembre 20, 2019 | en Herramientas
  • Cómo ejecutar JavaScript desde Python: Guía práctica con js2py publicado el octubre 30, 2025 | en JavaScript, Python
  • Método del codo (Elbow method) para seleccionar el número óptimo de clústeres en K-means publicado el junio 9, 2023 | en Ciencia de datos

Publicidad

Lo mejor valorado

4.9 (24)

Seleccionar filas y columnas en Pandas con iloc y loc

4.6 (16)

Archivos JSON con Python: lectura y escritura

4.4 (14)

Ordenación de diccionarios en Python mediante clave o valor

4.7 (13)

Operaciones de filtrado de DataFrame con Pandas en base a los valores de las columnas

4.9 (11)

Pandas: Cambiar los tipos de datos en los DataFrames

Comentarios recientes

  • M. Pilar en Cómo eliminar las noticias en Windows 11 y recuperar tu concentración
  • Daniel Rodríguez en Probabilidad básica: cómo entender el azar en nuestra vida diaria
  • Pepe en Probabilidad básica: cómo entender el azar en nuestra vida diaria
  • CARLOS ARETURO BELLO CACERES en Justicio: La herramienta gratuita de IA para consultas legales
  • Piera en Ecuaciones multilínea en Markdown

Publicidad


Footer

Analytics Lane

  • Acerca de Analytics Lane
  • Boletín de noticias
  • Contacto
  • Libros
  • Lo más popular
  • Noticias
  • Tienda
  • Tiendas afiliadas

Secciones

  • Ciencia de datos
  • Criptografía
  • Herramientas
  • Machine Learning
  • Opinión
  • Productividad
  • Programación
  • Reseñas

Sobre de Analytics Lane

En Analytics Lane tratamos de explicar los principales conceptos de la ciencia e ingeniería de datos con un enfoque práctico. Los principales temas tratados son ciencia de datos, ingeniería de datos, inteligencia artificial, machine learning, deep learning y criptografía. Además, también se habla de los principales lenguajes de programación y herramientas utilizadas por los científicos e ingenieros de datos.

Copyright © 2018-2026 Analytics Lane ·Términos y condiciones ·Política de Cookies ·Política de Privacidad ·Herramientas de privacidad ·Contacto