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