免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 23844 | 回复: 0

请教:对3列分组,剩下2列做不同聚合运算, 数量求和,均价求加权平均数 [复制链接]

论坛徽章:
0
发表于 2021-08-12 19:46 |显示全部楼层
本帖最后由 ycyutingyong 于 2021-08-12 19:51 编辑

请教下大师, 下面这段代码, 是以型号,规格,颜色, 三列进行分组, 对剩下的2列做不同的运算, 数量的列求和, 对均价的列求加权平均数,  加权平均数= (数量*均价).sum /数量.sum  想用一句代码实现, 但是失败了,才刚学习的小白不清楚错在哪里,  就另外拼凑了代码得到了结果, 请教大师如果精简代码达到下面同样的结果和表格格式dataframe

df=pd.DataFrame({'型号':['A','A','A','A','B',],
                    '规格':['H','H','H','H','H'],
                     '颜色':['T','T','K','K','K'],
                     '数量':[2,1,1,3,5],
                      '均价':[15,10,5,10,3]})
print(df)
def jj(x):#求加权平均数的函数
    x['均价']=np.average(x['均价'],weights=x['数量']);return x   
df1=df.groupby(['型号','规格','颜色']).apply(jj)   #不合并行,按分组计算加权平均价写到每行
df1=df1.groupby(['型号','规格','颜色','均价'],as_index=False).agg({'数量':np.sum})   #分组时as_index设索引和隐藏相同索引名
#想用下面这句代替上面所有代码,但是报错,只有用上面几句代码是为了得到结果拼凑而成,请大师指点下,是否有简短的代码实现
#df1=df1.groupby(['型号','规格','颜色'],as_index=False).agg({'数量':np.sum,'均价':lambda g:np.average(g['单价'],weights=g['数量'])})#
print(df1)


您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP