在Pandas Python中聚合多列并获取平均值



我有这个数据帧

df

month      merchant   sales
11           M1        10   
11           M1        6     
11           M2        7
12           M3        8
12           M4        9
12           M2        6
10           M5        11

我想按month, merchant分组,并得到每个商家每月sales的平均值(四舍五入2位小数)。

如下图所示,对于month 11,对于M1可以计算为((10+6)/(10+6+7)),对于M2可以计算为(7/(10+6+7))。特定月份的平均值之和不大于1。例如month 11,它们的和是0.69+0.30 ~ 1

我要找的输出是:

month      merchant   sales    average
11           M1        16        0.69  
11           M2        7         0.30 
12           M3        8         0.30
12           M4        9         0.39
12           M2        6         0.26
10           M5        11        1

我已经试过了,但是没有得到我想要的。

df =df.groupby('month')[['merchant', 'sales']].agg(list).reset_index()

有谁能帮上忙吗?

您可以按月分组并汇总销售额,然后将销售额除以总和:

df2 = df.groupby(['month', 'merchant'])['sales'].sum().reset_index()
df2['average'] = df2['sales'] / df2.groupby(['month'])['sales'].transform(sum)
df2
month merchant  sales   average
0     10       M5     11  1.000000
1     11       M1     16  0.695652
2     11       M2      7  0.304348
3     12       M2      6  0.260870
4     12       M3      8  0.347826
5     12       M4      9  0.391304

最新更新