Pandas 数据分组
在处理数据时,经常会需要对某一列或多列进行分组,分组后再对数据进行计算累加、最大值、最小值等。类似于Excel里的分类汇总,
在Pandas中,我们可以使用groupby 来完成这系列的分组统计。
语法结构:
dataframe.groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=False, **kwargs)
参数说明:
by:指定分组依据的列名或列名的列表
axis:默认为0,表示按行进行分组;若axis=1,表示按列进行分组
level:用于多层索引的分组,默认为None
as_index:默认为True,表示分组后的列作为索引,若设置为False,
则不以分组的列作为索引
sort:默认为True,表示分组后的结果是否按照列名进行排序
group_keys:默认为True,表示在最终结果中添加分组键
squeeze:默认为False,表示当只有一个分组时,结果是否以Series形式返回
多学一招
按某列分组: groupby("列名称")
按多列分组: groupby(["列名称1","列名称2"])
Pandas 数据分组后常见提取方法
数据分组后,有如下对数据分组操作使用方法。
df=pd.read_excel(“门店销售数据.xlsx”)
#按门店编号分组
df=df.groupby("门店编号")
#统计每组的大小
print(df.size())
#获每个组的第一行数据
print(df.first())
#获每个组的最后一行数据
print(df.last())
#获取每组的第二行数据
print(df.nth(1))
#获取指定组的数据
group1=df.get_group("A1001")
print(group1)
df.size(),输出图如下:
df.get_group("A1001") 提取某一组数据,输出如下:
Pandas 聚合函数
分组聚合依某列或多列将数据分成若干组,然后对分组后的数据分别进行汇总计算,如求和,最大值,最小值,平均值,方差等,
这些用于汇总计算的函数就是聚合函数。
Pandas 常见聚合函数
函数名 | 功能 | 示例 |
sum() | 计算数据的总和 | dataframe.聚合函数名称() series.聚合函数名称() |
mean() | 计算数据的均值 | |
median() | 计算数据的中位数 | |
min() | 计算数据的最小值 | |
max() | 计算数据的最大值 | |
count() | 计算非缺失值的数量 | |
std() | 计算数据的标准差 | |
var() | 计算数据的方差 | |
quantile() | 计算数据的分位数 | |
describe() | 提供数据的描述性统计信息(如计数、均值等) | |
first() | 第一次出现的值 | |
last() | 最后一次出现的值 |
Pandas 数据分组与聚合示例
需求,将销售明细表2022表与销售明细表2023表按月份分组,对销售金额列进行统计,以便后成进行可视化。
df2022=pd.read_excel("门店销售数据.xlsx",sheet_name="销售明细表2022")
df2022Groupe = df2022.groupby(["月份"])["销售金额"].sum().reset_index(name="2022").T
df2023=pd.read_excel("门店销售数据.xlsx",sheet_name="销售明细表2023")
df2023Groupe = df2023.groupby(["月份"])["销售金额"].sum().reset_index(name="2023").T
allGroup=pd.concat([df2022Groupe,df2023Groupe[1:]])
print(allGroup)
输出图如下:
Pandas agg函数
agg函数提供的聚合功能可以在一次计算中按分组计算多个统计数据,可以接受多个参数,其中最常用的参数是一个字典,字典的键表示要进行聚合计算的列名,字典的值表示要应用的聚合函数。聚合函数可以是内置的统计函数,如'mean'(计算均值)、'sum'(计算总和)、'max'(找到最大值)、'min'(找到最小值)等,也可以是自定义的函数。
df2022=pd.read_excel("门店销售数据.xlsx",sheet_name="销售明细表2022")
df2022Groupe = df2022.groupby(["月份"]).agg({"销售数量":"sum","销售金额":"sum"})
print(df2022Groupe)