您的位置:首页 > 编程语言 > Python开发

python|jupyter|pandas|4.4使用分组聚合进行组内计算

2020-01-14 20:38 796 查看

4.4使用分组聚合进行组内计算

使用groupby拆分数据
DataFrame.groupby(by=None,axis=0,level=None,as_index=True,sort=True,group_keys=True,squeeze=False,**kwargs)


import pandas as pd
import numpy as np
from sqlalchemy import create_engine
engine=create_engine('mysql+pymysql://root:1234@127.0.0.1:3306/testdb?charset=utf8')
detail=pd.read_table('',con=engine)

#对菜品订单表依据订单编号分组
detailgroup=detail[['order_id','counts','amounts']].groupby(by='order_id')
print('分组结果',detailgroup)

#groupby求均值、标准差、中位数
print('订单详情表分组后前5组每组均值为:',detailgroup.mean().head())
print('订单详情表分组后前5组每组标准差为:',detailgroup.std().head())
print('订单详情表分组后前5组每组大小为:',detailgroup.size().head())
使用agg聚合函数
dataframe.agg(func,axis=0,*args,**kwargs)
dataframe.aggregate(func,axis=0,*args,**kwargs)

#使用agg求出当前数据对应的统计量
print('订单详情表的菜品销量和售价的和与均值为',detail[['counts','amounts']].agg([np.sum,np.mean])

#使用agg分别求字段的不同统计量
print('订单详情表的菜品销量总和和售价的均值为',detail.agg({'counts':np.sum,'amounts':np.mean}))

#使用agg方法求不同字段的不同数目统计量
print('订单详情表的菜品销量总和和售价的总和与均值为',detail.agg({'counts':np.sum,'amounts':[np.sum,np.mean]}))

#在agg方法中使用自定义函数
#自定义函数求两倍的和
def doublesum1(data):
s=data.sum()*2
return s
print('订单详情表的菜品销量总和的两倍为',detail.agg({'counts':doublesum1},axis=0))

#agg方法中使用的自定义函数含numpy中的函数
#自定义求两倍的和
def doublesum2(data):
s=np.sum(data)*2
return s
print(detail.agg({'counts':doublesum2},axis=0).head())
print(detail[[''counts,'amounts']].agg(doublesum2)

#使用agg做简单的聚合
print('订单详情表分组后前3组每组均值:',detailroup.agg(np.mean).head(3))
print('订单详情表分组后前3组每组标准差:',detailroup.agg(np.std).head(3))
print('订单详情表分组后前3组菜品总数和售价均值:',detailroup.agg({'counts:np.sum','amounts:np.mean'}).head(3))
使用apply方法聚合数据
dataframe.apply(func,axis=0,broadcast=False,raw=False,reduce=None,args=(),**kwds)

#基本用法
print('订单详情表的菜品销量与售价的均值',detail[['counts','amounts']].apply(np.mean))

#使用apply进行聚合
print('前三组的均值',detailgroup.apply(np.mean).head(3))
print('前三组的标准差',detailgroup.apply(np.std).head(3))
使用transform方法进行聚合
print('订单详情表菜品销量和售价的两倍',detail[['counts','amounts']].transform(lambda x:x*2).head(4))
#组内离差标准化
print('订单详情表分组后实现组内离差标准化后前5行为,',detailgroup.transform(lambda x:(x.mean()-x.min())/(x.max()-x.min())).head())
  • 点赞
  • 收藏
  • 分享
  • 文章举报
牛奶与喵 发布了18 篇原创文章 · 获赞 0 · 访问量 1090 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: