Pandas进阶

本文深入探讨Pandas的分组聚合操作,包括groupby、agg函数的使用,并通过店铺营业额、透视表和交叉表的案例,展示如何统计分析数据。同时,介绍了TGI指数分析和连锁超市销售统计,提供了实际应用的解决方案。
摘要由CSDN通过智能技术生成
一、Pandas 的分组聚合

分组聚合原理:

1、使用 groupby 方法进行分组聚合

分组:
该方法提供的是分组聚合步骤中的拆分功能,能根据索引或字段对数据进行分组。其常 用参数与使用格式如下

DataFrame.groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=False, **kwargs)

groupby 参数说明

参数 说明
by 接收 list,string,mapping 或者 generator,用于确定进行分组的依据,无默认
axis 接收 int,表示操作的轴向,默认对行进行操作,默认为 0
level 接收 int 或者索引名,代表标签所在级别,默认为 None
as_index 接收 boolearn,表示聚合后的聚合标签是否以 DataFrame 索引形式输出,默认 为 True
sort 接收 boolearn,表示是否依据分组标签进行排序。默认为 True。
group_keys 接收 boolearn,表示是否显示分组标签的名称。默认为 True
squeeze 接收 boolearn,表示是否在允许的情况下对返回数据进行降维,默认为 False

groupby 方法的参数及其说明——by 参数的特别说明:

如果传入的是一个函数则对索引进行计算并分组

如果传入的是一个字典或者 Series,则字典或者 Series 的值用来做分组依据

如果传入一个 NumPy 数组,则数据的元素作为分组依据

如果传入的是字符串或者字符串列表,则使用这些字符串所代表的字段作为分组依据

聚合:
用 groupby 方法分组后的结果并不能直接查看,而是被存在内存中,输出的是内存地址, 实际上分组后的数据对象 groupby 类似 Series 与 DataFrame,是 pandas 提供的一种对象

groupby 对象常用的描述统计

函数 说明 函数 说明
count 计算分组的数目,包括缺失值 cumcount 对每个分组中组员进行 标记,0 至 n-1
head 返回每组的前 n 个值 size 返回每组的大小
max 返回每组最大值 min 返回每组最小值
mean 返回每组的均值 std 返回每组的标准差
median 返回每组的中位数 sum 返回每组的和

2、使用 agg 函数进行聚合数据

agg 参数理解

agg 方法支持对每个分组应用某函数,包括 Python 内置函数或自定义函数,同时这两 个方法能够也能够直接对 DataFrame 进行函数应用操作

DataFrame.agg(func, axis=0, *args, **kwargs)

agg 参数说明

参数 说明
func 接收 list、dict、function,表示应用于每行/每列的函数
axis 接收 0 或者 1,代表操作的轴向,默认为 0,表示行的方向

2、agg 方法求统计指标

创建学生信息表,使用 agg 方法进行统计指标

学生信息表

cls_id group_id name hight score
Stu_0 A 1 zs 170 99.0
Stu_1 A 1 ls 172 98.0
Stu_2 A 1 ww 185 97.5
Stu_3 A 2 zl 190 96.0
Stu_4 A 2 xx 173 89.0
Stu_5 A 2 yy 156 85.0
Stu_6 B 1 zz 162 99.0
Stu_7 B 1 oo 165 78.0
Stu_8 B 1 pp 189 89.0
Stu_9 B 2 ii 178 88.0
Stu_10 B 2 tt 175 92.0
Stu_11 B 2 qq 176 94.0

学生信息表数据字段说明

字段名称 说明
cls_id 班级 ID
group_id 小组 ID
name 姓名
hight 身高
score 考试成绩

代码实现:

import pandas as pd
import numpy as np

# 分组聚合: 先分组,再聚合 --->1、指定如何分组? 2、统计指标?

# 创建df
df = pd.DataFrame(
    data={
   
        'cls_id': ['A', 'A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'B', 'B'],
        'group_id': [1, 1, 1, 2, 2, 2, 1, 1, 1, 2, 2, 2],
        'name': ['aa', 'bb', 'cc', 'dd', 'ee', 'ff', 'gg', 'hh', 'ii', 'jj', 'kk', 'oo'],
        'hight': [170, 172.5, 168, 192, 181.5, 156, 154, 162, 180, 179.5, 173, 176.5],
        'score': [99, 92, 85, 71, 59, 76.5, 89, 95, 93, 79, 70, 84]
    },
    index=['stu0', 'stu1', 'stu2', 'stu3', 'stu4', 'stu5', 'stu6', 'stu7', 'stu8', 'stu9', 'stu10', 'stu11']
)
print('df:\n', df)
print('df:\n', type(df))
print('*' * 100)
# 指定分组、指定统计指标
# 可以使用groupby 来指定分组 --by参数 --指定分组的列
# 按照单列分组,统计单列的指标
# 按照班级id进行分组,统计各个班级的平均成绩
res = df.groupby(by='cls_id')['score'].mean()
print('res:\n', res)

# 按照多列进行分组,统计单列指标
# 先按照班级id,再按照小组Id, 进行分组, 统计各个组的平均成绩
res = df.groupby(by=['cls_id', 'group_id'])['score'].mean()
print('res:\n',res)

# 按照单列分组,统计多列的指标
# 按照班级Id进行分组,统计成绩、身高的平均值
res = df.groupby(by='cls_id')[['score','hight']].mean()
print('res:\n',res)

# 按照多列进行分组,统计多列的指标
# 先按照班级id,再按照小组id进行分组,统计各个组内的成绩、身高的最大值
res = df.groupby(by=['cls_id', 'group_id'])[['score', 'hight']].max()
print('res:\n',res)

1、可以使用 agg 方法一次求出 DataFrame 多列的多个统计指标

# agg --->不分组 ---对列求取指标
# 注意:agg = aggregate 同样的
# 1、对多列求取多个指标
# 对score 、hight  求取其均值、最大值、最小值
res = df.loc[:, ['score', 'hight']].agg([np.mean, np.max
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值