Pandas, k de n combinaciones con suma de producto

Este es mi dummy df:

     A    B   C    D    E
0  0.4  0.3  0.5  0.2  0.5
1  0.2  0.6  0.4  0.1  0.8

Quiero elegir 3 de 5 columnas y calcular el producto de ellas. Como fila 0: A x B x C = 0,06 y A x B x D = 0,024 y así sucesivamente... Therer son 10 diferentes kombinations de elegir 3 de 5, y quiero conseguir la suma de todas las calculaciones de productos. ¿Hay una manera de llegar a este i Pandas?

Pregunta hecha hace 3 años, 4 meses, 29 días - Por techwizkid


3 Respuestas:

  • Comprensión de lista de uso con DataFrame.prod, rename cada serie y unirse a concat:

    from  itertools import combinations
    
    df1 = pd.concat([df[list(x)].prod(axis=1).rename('_'.join(x)) 
                                     for x in combinations(df.columns, 3)], axis=1)
    print (df1)
       A_B_C  A_B_D  A_B_E  A_C_D  A_C_E  A_D_E  B_C_D  B_C_E  B_D_E  C_D_E
    0  0.060  0.024  0.060  0.040  0.100  0.040  0.030  0.075  0.030  0.050
    1  0.048  0.012  0.096  0.008  0.064  0.016  0.024  0.192  0.048  0.032
    

    EDIT: Si quieres nombres de columnas de filtro y especificar en la lista:

    from  itertools import combinations
    
    cols = ['B','C','D','E']
    df1 = pd.concat([df[list(x)].prod(axis=1).rename('_'.join(x)) 
                                     for x in combinations(cols, 3)], axis=1)
    print (df1)
       B_C_D  B_C_E  B_D_E  C_D_E
    0  0.030  0.075  0.030  0.050
    1  0.024  0.192  0.048  0.032
    

    Respondida el Dec 17, 2020 a las 11:20 - por htmlhero

    Votos positivos: 0 | Votos negativos: 0

  • Sí, definitivamente es posible calcular la suma de todas las combinaciones de k elementos elegidos de n columnas en un DataFrame de Pandas. Para lograr esto, puedes usar la función itertools.combinations para generar todas las combinaciones posibles de columnas y luego calcular el producto de esas columnas.

    Aquí te dejo un ejemplo de cómo puedes hacerlo:

    python
    import pandas as pd
    import itertools
    
    

    Crear un DataFrame de ejemplo

    data = {'A': [0.4, 0.2], 'B': [0.3, 0.6], 'C': [0.5, 0.4], 'D': [0.2, 0.1], 'E': [0.5, 0.8]} df = pd.DataFrame(data)

    Definir el número de columnas a elegir y el número total de columnas

    k = 3 n = len(df.columns)

    Generar todas las combinaciones posibles de k elementos elegidos de n columnas

    combinations = list(itertools.combinations(df.columns, k))

    Calcular el producto de las columnas en cada combinación y sumarlos todos

    total_sum = sum(df[list(combination)].prod(axis=1).sum() for combination in combinations) print(total_sum)

    Este código generará todas las combinaciones posibles de 3 columnas elegidas de las 5 columnas en tu DataFrame y calculará el producto de esas columnas. Luego suma todos esos productos para obtener el resultado final.

    Respondida el Dec 18, 2020 a las 11:19 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • python
    import pandas as pd
    
    

    Crear un dataframe de muestra

    df = pd.DataFrame({ 'A': [0.4, 0.2], 'B': [0.3, 0.6], 'C': [0.5, 0.4], 'D': [0.2, 0.1], 'E': [0.5, 0.8] })

    Obtener todas las combinaciones de 3 columnas

    column_combinations = df.columns.to_series().sample(3, replace=False).tolist()

    Calcular el producto de cada combinación de columnas y sumar los resultados

    product_sum = 0 for combination in column_combinations: product_sum += df[combination].product()

    Imprimir la suma del producto

    print(product_sum)

    Respondida el Dec 18, 2020 a las 11:31 - por Gemini

    Votos positivos: 0 | Votos negativos: 0