python 在一行代码中计算加权平均值

ut6juiuv  于 2023-04-10  发布在  Python
关注(0)|答案(1)|浏览(174)

我想用一行或几行代码来计算加权平均值。它也可以在几个步骤中完成。
例如,在第一次,使用V1、V2和V3作为权重计算All、Falcon和Parrot的加权平均值。在第二步中,使用列值作为独立于All、Falcon和Parrot权重的权重来更改All的权重
我不想为每一列写单独的代码
这是我的dataframe:

df2 = pd.DataFrame({'class': ['All', 'All', 'Falcon', 'Falcon', 'Parrot', 'Parrot'],
                    'V1': [245, 362, 380., 370., 248., 269.],
                    'V2' : [356, 653, 263, 542, 456, 531],
                    'V3': [265, 378, 0, 0, 356, 541],
                    'price':[5, 2, 3, 5, 1, 5]});


Result =    V1         V2          V3
  All   3,485592316  3,46162085   3,338961039
 Falcon 3,986666667  4,346583851    
 Parrot 3,081237911  3,151975684  3,412486065

权重将在我的情况下V1,V2和V3的所有和重量将价格猎鹰和鹦鹉

t2a7ltrp

t2a7ltrp1#

您可以使用以下

weight_cols = ['V1', 'V2', 'V3']

df.groupby('class') \
   .apply(
    lambda frame: \
        frame[weight_cols].multiply(frame['price'], axis='index').sum(axis=0) \
            .multiply(1/frame[weight_cols].sum(axis=0))) \
  .reset_index(drop=False) \
  .rename({weight_col: f'price_weighted_average_{weight_col.lower()}' for weight_col in weight_cols}, axis=1)

相关问题