Pandas, k of n combinations with product sum

Pandas, k of n combinations with product sum

这是我的虚拟 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

我想从 5 列中选出 3 列并计算它们的乘积。像第 0 行:A x B x C = 0.06 和 A x B x D = 0.024 等等......有 10 种不同的组合,从 5 种中选出 3 种,我想得到所有产品计算的总和。有没有办法做到这一点 Pandas?

将列表理解与 DataFrame.prod, rename each Series and join by 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

编辑:如果要过滤列名称并在列表中指定:

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