我想添加列并将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
    

    10-02 19:08