本帖最后由 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)
|