我想添加列并将Sum-Product应用于相应的列(按名称)。
数据说明:
VAR1 VAR2 1834_Value 1673_Value 153_Value 0_Value 1834_Prob 0_Prob 1673_Prob 153_Prob
4 1 10 20 30 40 0.100 0.400 0.200 0.300
1 3 28 79 88 36 0.187 0.057 0.181 0.574
3 3 30 72 59 95 0.227 0.050 0.171 0.552
4 2 55 46 85 97 NaN NaN NaN NaN
1 2 28 41 62 64 0.251 0.092 0.084 0.573
5 1 82 51 21 24 NaN NaN NaN NaN
2 2 27 90 71 83 0.114 0.003 0.131 0.751
5 2 97 94 46 46 0.285 0.112 0.126 0.477
2 5 27 66 73 44 NaN NaN NaN NaN
1 5 39 76 90 58 NaN NaN NaN NaN
5 2 63 71 47 92 0.279 0.163 0.212 0.346
例如:第一行的值应为:
0.1*10 + 0.2*20 + 0.3*30 + 0.4*40
=
30
。预期结果:
VAR1 VAR2 1834_Value 1673_Value 153_Value 0_Value 1834_Prob 0_Prob 1673_Prob 153_Prob SumProduct
4 1 10 20 30 40 0.100 0.400 0.200 0.300 30.000
1 3 28 79 88 36 0.187 0.057 0.181 0.574 72.175
3 3 30 72 59 95 0.227 0.050 0.171 0.552 56.464
4 2 55 46 85 97 NaN NaN NaN NaN NaN
1 2 28 41 62 64 0.251 0.092 0.084 0.573 51.885
5 1 82 51 21 24 NaN NaN NaN NaN NaN
2 2 27 90 71 83 0.114 0.003 0.131 0.751 68.523
5 2 97 94 46 46 0.285 0.112 0.126 0.477 66.570
2 5 27 66 73 44 NaN NaN NaN NaN NaN
1 5 39 76 90 58 NaN NaN NaN NaN NaN
5 2 63 71 47 92 0.279 0.163 0.212 0.346 63.905
最佳答案
这是我的方法:
s = df.iloc[:,2:]
df['sum_prod'] = (s.groupby(s.columns.str.extract('^(\d+)')[0].values,
axis=1)
.prod(min_count=2).sum(1, skipna=False)
)
print(df['sum_prod'])
输出:
0 30.000
1 72.099
2 56.440
3 NaN
4 51.886
5 NaN
6 68.438
7 66.583
8 NaN
9 NaN
10 63.887
Name: sum_prod, dtype: float64