El código gen13prod.py hace un cálculo para las quinielas con 13 aciertos respecto a una dada.
La salida de estos cálculos se presenta como:
Columna	Probabilidad	LAE	Rentabilidad
Se pide cambiar la denominación LAE a Frecuencia
También se pide:
Para la primera columna con 13 aciertos presentar a su vez los datos correpondientes a las columnas con 13 aciertos respecto a ella.
Se hará sin poner las etiquetas y debajo de esta primera columna con un sangrado de una tabulación.
Hacer lo mismo para la segunda columna como para la anterior.
Para las demás dejar las cosas como están.

Código gen13prod.py:

def generar_quinielas_13_aciertos(columna_original):
    signos = ['1', 'X', '2']
    resultado = []

    for i in range(len(columna_original)):
        for signo in signos:
            if columna_original[i] != signo:
                nueva_columna = columna_original[:i] + signo + columna_original[i+1:]
                resultado.append(nueva_columna)

    return resultado

def calcular_producto_columna(partidos, columna):
    producto_prob = 1
    producto_lae = 1
    producto_rent = 1
    
    for i, resultado in enumerate(columna):
        if resultado == "1":
            idx = 0
        elif resultado == "X":
            idx = 1
        else:  # resultado es "2"
            idx = 2
        
        partido = partidos[i]
        producto_prob *= partido["prob"][idx] / 100  # Convertimos % a decimal
        producto_lae *= partido["lae"][idx] / 100    # Convertimos % a decimal
        producto_rent *= partido["rent"][idx]
    
    return producto_prob, producto_lae, producto_rent

# Datos de los partidos
partidos = [
    {"partido": 1, "prob": [48, 26, 27], "lae": [52, 29, 19], "rent": [0.92, 0.88, 1.41]},
    {"partido": 2, "prob": [50, 27, 24], "lae": [55, 27, 18], "rent": [0.91, 0.98, 1.31]},
    {"partido": 3, "prob": [41, 29, 30], "lae": [54, 30, 16], "rent": [0.77, 0.97, 1.86]},
    {"partido": 4, "prob": [78, 13, 8], "lae": [90, 6, 4], "rent": [0.87, 2.22, 2.07]},
    {"partido": 5, "prob": [34, 27, 39], "lae": [29, 29, 42], "rent": [1.18, 0.92, 0.94]},
    {"partido": 6, "prob": [34, 27, 39], "lae": [23, 28, 49], "rent": [1.47, 0.97, 0.80]},
    {"partido": 7, "prob": [40, 29, 31], "lae": [43, 30, 27], "rent": [0.94, 0.95, 1.15]},
    {"partido": 8, "prob": [24, 23, 53], "lae": [18, 20, 62], "rent": [1.33, 1.16, 0.85]},
    {"partido": 9, "prob": [40, 29, 32], "lae": [46, 31, 23], "rent": [0.86, 0.93, 1.38]},
    {"partido": 10, "prob": [32, 30, 38], "lae": [21, 24, 55], "rent": [1.54, 1.23, 0.69]},
    {"partido": 11, "prob": [59, 25, 17], "lae": [76, 16, 8], "rent": [0.77, 1.55, 2.07]},
    {"partido": 12, "prob": [36, 31, 33], "lae": [25, 31, 44], "rent": [1.43, 1.01, 0.75]},
    {"partido": 13, "prob": [55, 24, 22], "lae": [67, 17, 16], "rent": [0.81, 1.40, 1.36]},
    {"partido": 14, "prob": [36, 28, 36], "lae": [35, 31, 34], "rent": [1.03, 0.90, 1.07]}
]

# Columna original con 14 aciertos
columna_original = "11111111111111"

# Generar columnas con 13 aciertos
quinielas_13_aciertos = generar_quinielas_13_aciertos(columna_original)

# Resultados
print(f"{'COLUMNA':<20} {'PROBABILIDAD':<20} {'LAE':<20} {'RENTABILIDAD':<20}")
print("="*80)

for columna in quinielas_13_aciertos:
    prod_prob, prod_lae, prod_rent = calcular_producto_columna(partidos, columna)
    print(f"{columna:<20} {prod_prob:.6e} {prod_lae:.6e} {prod_rent:.6f}")