Вам не нужно преобразовывать кадры данных назад и вперед. Если вы посмотрите на то, что представляет собой средневзвешенное значение на математической основе, то это не что-то вроде avg (массив), а avg (массив * веса).
Поскольку вы не дали конкретную c часть данных Я взял некоторые случайные данные и веса и поместил их в один фрейм данных:
df=pd.DataFrame(np.random.randn(20,5),columns=['a','b','c','d','e'])
df['weights']=[2,4,6,8,10,12,14,16,18,20,19,17,15,13,11,9,7,5,3,1]
df.head()
Out[]:
a b c d e weights
0 1.358269 0.377319 -0.097123 -0.790024 1.127523 2
1 1.011136 -1.541731 -0.331144 0.244773 -0.033312 4
2 -0.715343 -0.711782 -2.239824 -2.323896 0.568065 6
3 0.495619 0.779495 -1.020806 -0.093149 0.219650 8
4 -0.341321 0.309430 0.083620 -1.214781 0.970039 10
Если вы хотите получить среднее значение всех столбцов, кроме последнего (т. Е. Столбца веса), это будет
df.iloc[:,:-1].sum()
Out[]:
a -7.799888
b 5.150143
c -7.783813
d 7.116149
e -3.548300
dtype: float64
Если вы хотите включить вес, вы можете использовать функцию умножения, чтобы применить веса к каждому столбцу в кадре данных:
df.iloc[:,:-1].multiply(df.iloc[:,-1], axis="index").mean()
Out[]:
a -5.229274
b 3.356656
c -3.182449
d 5.438353
e -4.000169
dtype: float64
В случае, если я неправильно понял вашу проблему, пожалуйста, уточните подробнее