樓主,以下為我的代碼,不知道是不是你要的,獻醜了
|
樓主,以下為我的代碼,不知道是不是你要的,獻醜了
|
#谢谢老师的回复, 我想要的结果, 是直接的表格, 可以直接写到excel的结果, 并且型号, 规格, 版本, 不能合并在一个单元格, 要分列显示, 我是需要写到#excel中去的, 最终得到就是结果的表格形式, 我想得到的不但是结果, 还包含了表格的形式. 我下面的代码, 正好达到了我所要求的, 正确结果和表格#形式, 但是我感觉, 虽然结果正确, 但是我写的代码可能不太科学, 再次请问下老师第1点: 优化的代码应该怎么写 .. 第2点, 得到的结果打印出来, 第2行前面2列未显示, 如何让它正常显示 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(['型号','规格','版本','均价']).agg({'数量':np.sum}) #df1=df1.groupby(['型号','规格','版本']).agg({'数量':np.sum,'均价':'jj'}) #想用此句代替上面2句,但出错 print(df1) 型号 规格 版本 数量 均价 0 A H T 2 15 1 A H T 1 10 2 A H K 1 5 3 A H K 3 10 4 B H K 5 3 数量 型号 规格 版本 均价 A H K 8.750000 4 T 13.333333 3 B H K 3.000000 5 |
谢谢老师的回复, 结果是正确的, 就是显示的格式希望所有的信息都在一张表格体现出来, 我下面这段代码得到的结果就是希望的结果, 但是是我拼凑起的, 应该代码可以再优化, 老师能否把我下面代码精简优化下, 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]}) 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}) print(df1) |
我就是想以型号,规格,版本, 三列进行分组, 对剩下的2列做不同的运算, 数量的列求和, 对均价的列求加权平均数, 加权平均数= (数量*均价).sum /数量.sum 想用下面一句代码实现, 但是失败,才刚学习的小白不清楚错在哪里, 就另外拼凑了上面的代码得到了结果, 确实也是想要的结果和表格格式, 请教大师如何精简代码达到同样的结果和表格格式 df1=df.groupby(['型号','规格','版本'],as_index=False).agg({'数量':np.sum,'均价':lambda g:np.average(g['单价'],weights=g['数量'])}) |
增加2行代碼 前:
後:
如果再不能,試試多加:
|