数据科学 第 3 章: 9 累计与分组 groupby

本文深入探讨了Pandas库中的GroupBy功能,包括其基本使用方法、四种主要计算方式(aggregate, filter, transform, apply)及其高级应用。通过实例演示了如何对数据进行分组、计算、转换和应用,适合数据处理和分析的学习者。

本节学习groupby

引用激励数据,连接数据库jili表(代码省略)
数字简单计算
本节内容前面是运用sum/mean等函数对数字简单计算

jili.mean() #求均值
jili.mean(axis = 'columns') #求每行的均值
jili.sum()  #求和

groupby:切片计算

groupby的过程:
分割:把dataframe按指定的键分为若干组
应用:对每个组应用函数,通常为累计、转换或过滤
组合:将每组1的结果合并成一个输出数组。

jili.groupby('dep')  #聚合后没有用函数,会返回一个dataframe
jili.groupby('dep').sum()   #用函数后会显示计算结果

clipboard.png

# 组合dep 之后,切片oldrate,查看group的和。这里是字符,所以显示了group的所有值
jili.groupby('dep')['group'].sum()

#组合dep 之后,切片oldrate,查看oldrate的和
jili.groupby('dep')['oldrate'].sum()

clipboard.png

# 对每个可以计算的字段进行了描述性统计,中间有省略
# unstack是上一节索引中的内容,是把多重索引转换为行,具体可以看下面没有用unstack的对比。
jili.groupby('dep').describe().unstack()

#对groupby之后的结果,切片allbones字段,进行描述性统计
jili.groupby('dep')['allbones'].describe()

clipboard.png

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)

clipboard.png

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:

把计算的结果运用到原数据(看下图)
clipboard.png

5、高级用法

#组合为两层
jili.groupby(['dep','group']).mean()

#组合为两层后,只选allbones的值,然后再转换行列
jili.groupby(['dep','group'])['allbones'].sum().unstack()

clipboard.png

以上就是groupby的用法,之前跟着视频学过,但看书的话更详细,下节是透视表,拜拜。

### 使用SQL进行数据分析的方法 使用SQL(Structured Query Language)进行数据分析是数据科学商业智能领域中的一项重要技能。以下将详细介绍如何通过SQL实现数据分析,包括查询、过滤、聚合、排序以及高级分析功能。 #### 1. 数据查询 数据查询是SQL的基础操作,用于从数据库中提取特定的数据。`SELECT`语句用于指定需要查询的列,`FROM`语句用于指定查询的表。例如: ```sql SELECT column1, column2 FROM table_name; ``` 这一步可以通过限定字段来减少返回的数据量,从而提高效率[^2]。 #### 2. 数据过滤 通过`WHERE`子句可以对数据进行条件过滤,只选择满足特定条件的行。例如: ```sql SELECT * FROM employees WHERE department = 'Sales' AND salary > 50000; ``` 这种过滤方式在处理大型数据集时尤为重要,能够帮助用户快速定位感兴趣的数据[^2]。 #### 3. 聚合分组 SQL提供了多种聚合函数(如`COUNT()`、`SUM()`、`AVG()`等),结合`GROUP BY`子句可以对数据进行分组并计算每组的统计值。例如: ```sql SELECT department, COUNT(*) AS employee_count, AVG(salary) AS avg_salary FROM employees GROUP BY department; ``` 此示例展示了如何按部门分组,并计算每个部门的员工数量平均薪资[^1]。 #### 4. 排序数据 使用`ORDER BY`子句可以对结果集进行排序。默认情况下,数据按升序排列,可以通过添加`DESC`关键字实现降序排列。例如: ```sql SELECT name, salary FROM employees ORDER BY salary DESC; ``` 此命令将返回按薪资从高到低排列的员工列表[^2]。 #### 5. 时间序列分析 时间序列分析通常涉及日期或时间字段的操作。ClickHouse等数据库支持高效的日期函数,可用于生成时间维度的统计数据。例如: ```sql SELECT toStartOfMonth(order_date) AS month, COUNT(*) AS order_count FROM orders GROUP BY month ORDER BY month; ``` 上述查询按月汇总订单数量,适用于分析趋势性数据。 #### 6. 窗口函数 窗口函数允许在不破坏原有数据结构的情况下执行复杂的计算,例如排名、累计等。例如: ```sql SELECT customer_id, total_spent, RANK() OVER (ORDER BY total_spent DESC) AS rank FROM customer_spending; ``` 这段代码为每位客户计算了基于消费总额的排名。 #### 7. 内置函数 SQL内置了许多实用函数,可直接应用于数据处理。例如字符串操作、数学计算日期转换等。例如: ```sql SELECT customer_name, LENGTH(customer_name) AS name_length FROM customers; ``` 这里使用了`LENGTH()`函数计算客户名称的字符长度。 #### 8. 表连接 当需要从多个表中提取关联数据时,可以使用`JOIN`操作。常见的连接类型包括`INNER JOIN`、`LEFT JOIN`、`RIGHT JOIN``FULL OUTER JOIN`。例如: ```sql SELECT o.order_id, o.order_amount, c.customer_name FROM orders o INNER JOIN customers c ON o.customer_id = c.customer_id; ``` 此查询返回订单表客户表中完全匹配的数据[^4]。 --- ### 总结 SQL不仅是一个强大的数据查询工具,还可以用于清洗、转换分析数据。通过灵活运用`SELECT`、`WHERE`、`GROUP BY`、`ORDER BY`、窗口函数表连接等功能,可以高效地完成各种数据分析任务。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值