数据分组/数据透视表
数据分组就是根据一个或多个键(可以是函数、数组或df列名)将数据分成若干组,然后对分组后的数据分别进行汇总计算。
数据透视表与数据分组类似但又不同,数据分组是在一维(行)方向上不断拆分,而数据透视表是在行、列方向上同时拆分。
左边是数据分组;右边是数据透视表
- 数据分组
groupby()
分组键为列名 单列:df.groupby('客户分类').count() 多列:df.groupby(['客户分类','区域']).sum() groupby进行分组,
(对分组后的数据进行汇总运算的操作称为聚合,使用的函数称为聚合函数)
分组键为series 一个series:df.groupby(df["客户分类"]).count() 多个series:df.groupby([df["客户分类"],df["区域"]]).sum()
aggregate()
聚合函数直接在dataframegroupby上调用,一次只能使用一种汇总方式。aggregate可以一次使用多种汇总方式。
df.groupby("客户名称").aggregate(["count","sum"])
df.groupby("客户名称").aggregate({"用户":"count", "7月销量":"sum","8月销量":"sum"}) ——用字典
df.groupby("客户分类").sum().reset_index() ——重置索引
- 数据透视表
pivot_table() ——基于什么,统计什么,怎么统计
pd.pivot_table(data, values=None, index=None, columns=None, aggfunc='mean', fill_value=None, margins=False, dropna=True, margins_name='All')
(默认为求均值,name为all……)
#data 表示要做数据透视表的整个表
#values 对应Excel中值那个框
#index 对应Excel中行那个框
#columns 对应Excel中列那个框
#aggfunc 表示对values的计算类型
#fill_value 表示对空值的填充值
#margins 表示是否显示合计列
#dropna 表示是否删除缺失,如果为真的时,则把一整行全作为缺失值删除
#margins_name 表示合计列的列名
使用reset_index()重置索引
port_stats = titanic_survival.pivot_table(index="Embarked", values=["Fare","Survived"], aggfunc=np.sum)
print(port_stats)
Fare Survived
Embarked
C 10072.2962 93
Q 1022.2543 30
S 17439.3988 217
pd.pivot_table(df,values = "用户id", columns = "区域", index="客户名称", aggfunc = "count").reset_index()
pd.pivot_table(df,values = ["用户id","7月销量"], columns = "区域", index="客户名称", aggfunc = {"用户id":"count","7月销量":"sum"}).reset_index()
#如果需要对不同值进行不同的计算类型,则需要传入一个字典