Поскольку у вас несколько столбцов с одинаковыми именами, вот один из способов использования filter
. Чтобы увидеть, как это работает, на вашем df
вы делаете df.filter(like='Result')
, и вы получаете столбцы, в которых имя имеет Результат:
Result Result1
0 0.562100 536.00000
1 0.522100 2.15000
2 0.024564 6.48900
3 11.564256 0.45556
4 0.612300 0.66670
Вы можете создать массив, содержащий столбцы Sub_Pro:
import numpy as np
arr_sub_pro = np.round(df.filter(like='Result').values* df.filter(like='Attribute').values,3)
и вы получите значения столбцов sub_pro, например arr_sub_pro
:
array([[3.1500e-01, 3.0240e+00],
[2.9600e-01, 1.9995e+02],
[1.2800e-01, 5.1912e+01],
[4.6315e+01, 2.3920e+00],
[2.9400e-01, 3.4000e+00]])
Теперь вам нужно добавить их в правильную позицию в кадре данных, я думаю, что цикл for
необходим
for nb, col in zip( range(arr_sub_pro.shape[1]), df.filter(like='Attribute').columns):
df.insert(df.columns.get_loc(col)+1, 'Sub_pro{}'.format(nb), arr_sub_pro[:,nb])
здесь я получаю расположение столбца Attibut (nb) и вставляю значение из столбца nb arr_sub_pro
в следующую позицию
Чтобы добавить столбец 'F_Pro', вы можете сделать:
df.insert(len(df.columns), 'F_Pro', arr_sub_pro.sum(axis=1))
финал df
выглядит так:
Id Result Attribute Sub_pro0 Result1 Attribute1 Sub_pro1 \
0 1 0.562100 0.5600 0.315 536.00000 0.005642 3.024
1 2 0.522100 0.5677 0.296 2.15000 93.000000 199.950
2 3 0.024564 5.2300 0.128 6.48900 8.000000 51.912
3 4 11.564256 4.0050 46.315 0.45556 5.250000 2.392
4 5 0.612300 0.4798 0.294 0.66670 5.100000 3.400
F_Pro
0 3.339
1 200.246
2 52.040
3 48.707
4 3.694