加权平均值作为熊猫中的一列

我正在尝试添加一个具有 4 列权重的 4 列加权平均值的列

df = pd.DataFrame.from_dict(dict([('A', [2000, 1000, 2509, 2145]),
                                  ('A_Weight', [37, 47, 33, 16]),
                                  ('B', [2100, 1500, 2000, 1600]),
                                  ('B_weights', [17, 21, 6, 2]),
                                  ('C', [2500, 1400, 0, 2300]),
                                  ('C_weights', [5, 35, 0, 40]),
                                  ('D', [0, 1600, 2100, 2000]),
                                  ('D_weights', [0, 32, 10, 5])]))

我希望加权平均值位于名为“WA”的新列中,但每次尝试时都会显示 NaN

Desired Dataframe 将是一个具有以下值的新列,例如:

我使用的公式 (((A * A_weight)+(B * b_weight)+(C * C_weight)+(D * D_weight)) / sum(all weights)

df['WA'] = [2071.19,1323.70, 2363.20,2214.60 ]

谢谢

回答

一种直接而简单的方法如下:

(由于您的权重列名称的命名不一致,例如一些带有“s”,一些没有,一些带有大写的“W”,一些带有小写的“w”,因此对列进行分组是不方便的,例如 by .filter()

df['WA'] = ( (df['A'] * df['A_Weight']) + (df['B'] * df['B_weights']) + (df['C'] * df['C_weights']) + (df['D'] * df['D_weights']) ) / (df['A_Weight'] + df['B_weights'] + df['C_weights'] + df['D_weights'])

结果:

print(df)


      A  A_Weight     B  B_weights     C  C_weights     D  D_weights           WA
0  2000        37  2100         17  2500          5     0          0  2071.186441
1  1000        47  1500         21  1400         35  1600         32  1323.703704
2  2509        33  2000          6     0          0  2100         10  2363.204082
3  2145        16  1600          2  2300         40  2000          5  2214.603175


以上是加权平均值作为熊猫中的一列的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>