python数据分析之Dataframe分组(groupby)
Dataframe分组统计group by函数
对数据进⾏分组统计主要使⽤Dataframe函数,其功能如下:
根据给定的条件将数据拆分成组。
每个组都可单独应⽤函数(如sum、mean、std等)。
将结果合并到⼀个数据结果中。
语法如下:
"""
by:字典,映射,series对象,数组,标签,列表。如果by是⼀个函数,则对象索引的每个值调⽤它;如果传递了⼀个字典或者series对象,则使⽤该字典或者se ries对象来确定组。如果传递了数组ndarray,则按照原样式来确定这些组。
axis:axis=1表⽰⾏;axis=0表⽰列,默认值为0
level:表⽰索引层级,默认为⽆
as_index:布尔类型,默认为True,返回组标签为索引的对象
sort:对组进⾏排序,布尔类型,默认为True
group_keys:布尔类型,默认为True,调⽤apply函数时,将分组键添加到索引以标识⽚段
squeeze:布尔类型,默认为False,如果可能,减少返回类型的维度,否则返回⼀致类型
返回值:DataFrameGroupBy,返回包含有关组的信息的groupby对象
"""
2.展⽰举例数据集
这⾥我们使⽤书籍的数据进⾏展⽰。
import pandas as pd
pd.set_option('display.max_rows',500)#设置展⽰最⾼⾏数
pd.set_option('display.max_columns',1000)#设置展⽰最⾼列数
pd.set_option('display.unicode.east_asian_width',True)#设置列名对齐
#导⼊数据
ad_csv(r"C:\Users\Administrator\Desktop\python-code\Code\04\15\JD.csv",encoding="gbk")
print(df.head(10))
3.根据某⼀列分组
我们将"⼀级分类",“7天点击量”,"订单预定"这3列拿出组成⼀个新的df ,然后根据"⼀级分类"进⾏分组。并统计分组后的求和结果
#按照图书"⼀级分类"对订单数据进⾏分组统计求和
df1=df[["⼀级分类","7天点击量","订单预定"]]
groupby分组upby('⼀级分类').sum())
这⾥我们可以看见,被分组的属性会被放到最左边,根据属性内的种类进⾏统计计算。
4.按照多列进⾏分组
我们抽取4列组成新的df,并按照2列进⾏分组
#按照图书的“⼀级分类”和“⼆级分类”对订单数据进⾏分组统计求和
df2=df[["⼀级分类","⼆级分类","7天点击量","订单预定"]]
upby(["⼀级分类","⼆级分类"]).sum())#分组统计求和
这⾥的分组,会按照"⼀级分类"进⾏分组后,再在"⼆级分类"分组内再进⾏分组。
如果我们想只获取分组后“7天点击量”的求和结果,我们可以只取这⼀列。
#按照“⼆级分类”分组,然后抽取“7天点击量”并对该列进⾏求和运算
upby("⼆级分类")["7天点击量"].sum())
5.对分组数据进⾏迭代
迭代是指对分组后的数据进⾏循环操作,查看每⼀种类型中的具体的结果。
#按照“⼀级分类”分组,并输出每⼀分类中的订单数据
df3=df[["⼀级分类","7天点击量","订单预定"]]
for name,group upby("⼀级分类"):
print(name)
print(group)
上述代码的name是指“⼀级分类”分组后的值;⽽group是分组后的数据
如果对多列进⾏了分组,则需要在for循环中指定多列
key1和key2即是分组后的值
#迭代“⼀级分类”和"⼆级分类"的订单数据
df4=df[["⼀级分类","⼆级分类","7天点击量","订单预定"]]
for(key1,key2),group upby(["⼀级分类","⼆级分类"]):
print(key1,key2)
print(group)
6.对分组后的某列或者多列使⽤聚合函数
主要使⽤函数agg对分组结果进⾏聚合运算
#按“⼀级分类”,"7天点击量"和“订单预定”,并求平均值和总和
upby("⼀级分类").agg(["mean","sum"]))
可以指定不同列使⽤不同的聚合效果
如:⼀列求平均和总和,⼀列只求总和
upby("⼀级分类").agg({"7天点击量":['mean','sum'],"订单预定":['sum']}))
7.通过字典和Series对象进⾏分组统计
这⼀部分主要就是通过字典或者series将某些类别重新打上标签,然后按照新的标签分类。
如:我们要将北京,上海,⼴州三个⼀线城市放在北上⼴,其他城市各⾃统计,给他们重新打上标签,然后分组。
通过字典重新标签
#通过字典进⾏分组
ad_csv(r"C:\Users\Administrator\Desktop\python-code\Code\04\23\JD.csv",encoding="gbk")
df.set_index(['商品名称'],inplace=True)
dicts={"上海出库销量":"北上⼴",
"北京出库销量":"北上⼴",
"⼴州出库销量":"北上⼴",
"成都出库销量":"成都",
"武汉出库销量":"武汉",
"西安出库销量":"西安"}
upby(dicts,axis=1).sum()
print(df5)
通过series对象重新标签
#通过Series对象分组统计北上⼴的销量data={"上海出库销量":"北上⼴",
"北京出库销量":"北上⼴",
"⼴州出库销量":"北上⼴",
"成都出库销量":"成都",
"武汉出库销量":"武汉",
"西安出库销量":"西安"}
s1=pd.Series(data)
print(s1)
upby(s1,axis=1).sum() print(df6)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。