我有这个数据帧
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