本节学习groupby
引用激励数据,连接数据库jili表(代码省略)
数字简单计算
本节内容前面是运用sum/mean等函数对数字简单计算
jili.mean() #求均值
jili.mean(axis = 'columns') #求每行的均值
jili.sum() #求和
groupby:切片计算
groupby的过程:
分割:把dataframe按指定的键分为若干组
应用:对每个组应用函数,通常为累计、转换或过滤
组合:将每组1的结果合并成一个输出数组。
jili.groupby('dep') #聚合后没有用函数,会返回一个dataframe
jili.groupby('dep').sum() #用函数后会显示计算结果
# 组合dep 之后,切片oldrate,查看group的和。这里是字符,所以显示了group的所有值
jili.groupby('dep')['group'].sum()
#组合dep 之后,切片oldrate,查看oldrate的和
jili.groupby('dep')['oldrate'].sum()
# 对每个可以计算的字段进行了描述性统计,中间有省略
# unstack是上一节索引中的内容,是把多重索引转换为行,具体可以看下面没有用unstack的对比。
jili.groupby('dep').describe().unstack()
#对groupby之后的结果,切片allbones字段,进行描述性统计
jili.groupby('dep')['allbones'].describe()
groupby:4 种计算方法
1、aggregate:在groupby之后聚合的值上计算
计算方法。如 sum,count,max,std
2、filter:在原来的每个值上做计算,但是在groupby之后做计算
切片 注意filter切片器中一定要有计算方法(summean之类的),否则会报错。
# aggregate可以设定计算方法
jili.groupby('dep').aggregate(['min','max'])
# filter对allbones列进行了切片,如果dep的allbones均值小于9000,则不显示.
# 二部的均值低于9000,所以结果中没有二部数据。
jili.groupby('dep').filter(lambda x:x['allbones'].mean() >9000)
3、transform:在原来的每个值上做计算,但是在groupby之后做计算
转换,把原来的值换为计算后的值
jili.groupby('dep').transform(lambda x:x -x.mean()).head(3)
# x -x.mean()是减取本列的均值
def fun(x):
x['allbones'] = x['newbones']-x['oldbones']
return x
jili.groupby('dep').apply(fun)
4、apply:
把计算的结果运用到原数据(看下图)
5、高级用法
#组合为两层
jili.groupby(['dep','group']).mean()
#组合为两层后,只选allbones的值,然后再转换行列
jili.groupby(['dep','group'])['allbones'].sum().unstack()
以上就是groupby的用法,之前跟着视频学过,但看书的话更详细,下节是透视表,拜拜。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。