如何找到系列中的加权平均值?

How to find weighted mean in series?

我有这样的系列,是我使用 group by 实现的:

Job         Salary    
Teacher     15       3
            23       4
            28       5

Doctor      10       3 
            35       2
            40       1

如何计算教师或医生的平均工资?

教师平均工资计算公式为:(15 * 3) + (23 * 4) + (28 * 5) / (3+4+5)

为了简单起见,我认为在第一步中创建 DataFrame,乘以列,聚合 sum 最后划分列,如:

df1 = df.reset_index(name='count')

df1['new'] = df1['Salary'].mul(df1['count'])

df1 = df1.groupby('Job').sum()

df2 = df1['new'].div(df1['count']).reset_index(name='out')
print (df2)
       Job        out
0   Doctor  23.333333
1  Teacher  23.083333

就像@Mark Wang提到的,可以使用np.average like:

df2 =  df.reset_index(name='count').groupby('Job').apply(lambda x: np.average(x['Salary'], weights=x['count'])).reset_index(name='out')
print(df2)
       Job        out
0   Doctor  23.333333
1  Teacher  23.083333