我想根据“ first_name”列计算“ bonus”的平均值,但是分母不是案例的总和,因为并非所有案例的权重都为1,而权重可能为0.5。
例如,在杰森(Jason)的情况下,我想要的价值是他的奖金之和除以2.5。
由于在现实生活中我必须按区域等几列进行分组,因此我想根据这种情况对分组进行调整。
这是我的尝试,但这给了我正常的意思
raw_data = {'area': [1,2,3,3,4],'first_name': ['Jason','Jason','Jason', 'Jake','Jake'],
'bonus': [10,20, 10, 30, 20],'weight': [1,1,0.5,0.5,1]}
df = pd.DataFrame(raw_data, columns = ['area','first_name','bonus','weight'])
df
答案 0 :(得分:2)
使用:
(df.groupby('first_name')[['bonus', 'weight']].sum()
#.add_prefix('sum_') # you could also want it
.assign(result = lambda x: x['bonus'].div(x['weight'])))
或
(df[['first_name', 'bonus', 'weight']].groupby('first_name').sum()
#.add_prefix('sum_')
.assign(result = lambda x: x['bonus'].div(x['weight'])))
输出
bonus weight result
first_name
Jake 50 1.5 33.333333
Jason 40 2.5 16.000000
答案 1 :(得分:1)
一种方法是使用groupby().apply
和np.average
:
df.groupby('first_name').apply(lambda x: np.average(x.bonus, weights=x.weight))
输出:
first_name
Jake 23.333333
Jason 14.000000
dtype: float64