使用多列聚合并获取Python中的平均值
我有这个数据框使用多列聚合并获取Python中的平均值,python,pandas,Python,Pandas,我有这个数据框 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 我想按月份、商户进行分组,得到每个商户每月的平均销
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
我想按月份、商户
进行分组,得到每个商户每月的平均销售额(四舍五入为2位小数)sales
例如,如下所示,对于第11个月
,对于M1
可以计算为((10+6)/(10+6+7))
对于M2
计算为(7/(10+6+7))
。每个月的平均总和不应大于1。例如,对于第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()
在python pandas中,有人能帮上忙吗?您可以按月分组,汇总销售额,然后将销售额除以总和:
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
您可以按月分组,将销售额相加,然后将销售额除以总和:
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
@mck举个我举的例子,它工作得很好。但我试过你们的代码,在我拥有的大数据集上,它并没有给出我想要的。现在,我更新了问题。是否有可能根据我更新的问题更新您的解决方案?@Hiwot check edited answer?@mck对于我给出的示例,它非常有效。但我试过你们的代码,在我拥有的大数据集上,它并没有给出我想要的。现在,我更新了问题。是否可以根据我更新的问题更新您的解决方案?@Hiwot check编辑的答案?