在groupby大熊猫中发挥作用

时间:2020-04-15 14:27:09

标签: python pandas function group-by

我想根据“ 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

2 个答案:

答案 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().applynp.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