分组聚合(group by)顾名思义就是分2步:
groupby()
对某列进行分组agg()
函数里应用聚合函数计算结果,如sum()、mean()、count()、max()、min()
等,用于对每个分组进行聚合计算。import pandas as pd
import numpy as np
import random
df = pd.DataFrame({'A': ['a', 'b', 'a', 'b','a', 'b'],
'B': ['L', 'L', 'M', 'N','M', 'M'],
'C': [107, 177, 139, 3, 52, 38],
'D': [22, 59, 38, 50, 60, 82]})
df
A | B | C | D | |
---|---|---|---|---|
0 | a | L | 107 | 22 |
1 | b | L | 177 | 59 |
2 | a | M | 139 | 38 |
3 | b | N | 3 | 50 |
4 | a | M | 52 | 60 |
5 | b | M | 38 | 82 |
单列分组
① 对单列分组后应用sum
聚合函数
df.groupby('A').sum()
C | D | |
---|---|---|
A | ||
a | 298 | 120 |
b | 218 | 191 |
② 对单列分组后应用单个指定的聚合函数
df.groupby('A').agg({'C': 'min'}).rename(columns={'C': 'C_min'})
C_min | |
---|---|
A | |
a | 52 |
b | 3 |
③ 对单列分组后应用多个指定的聚合函数
df.groupby(['A']).agg({'C':'max','D':'min'}).rename(columns={'C':'C_max','D':'D_min'})
C_max | D_min | |
---|---|---|
A | ||
a | 139 | 22 |
b | 177 | 50 |
两列分组
① 对多列分组后应用sum
聚合函数:
df.groupby(['A', 'B']).sum()
C | D | ||
---|---|---|---|
A | B | ||
a | L | 107 | 22 |
M | 191 | 98 | |
b | L | 177 | 59 |
M | 38 | 82 | |
N | 3 | 50 |
② 对两列进行group
后,都应用max
聚合函数
df.groupby(['A','B']).agg({'C':'max'}).rename(columns={'C': 'C_max'})
C_max | ||
---|---|---|
A | B | |
a | L | 107 |
M | 139 | |
b | L | 177 |
M | 38 | |
N | 3 |
③ 对两列进行分组group
后,分别应用max
、min
聚合函数
df.groupby(['A','B']).agg({'C':'max','D':'min'}).rename(columns={'C':'C_max','D':'D_min'})
C_max | D_min | ||
---|---|---|---|
A | B | ||
a | L | 107 | 22 |
M | 139 | 38 | |
b | L | 177 | 59 |
M | 38 | 82 | |
N | 3 | 50 |
补充1: 应用自定义的聚合函数
df = pd.DataFrame({'A': ['a', 'b', 'a', 'b','a', 'b'],
'B': ['L', 'L', 'M', 'N','M', 'M'],
'C': [107, 177, 139, 3, 52, 38],
'D': [22, 59, 38, 50, 60, 82]})
df
A | B | C | D | |
---|---|---|---|---|
0 | a | L | 107 | 22 |
1 | b | L | 177 | 59 |
2 | a | M | 139 | 38 |
3 | b | N | 3 | 50 |
4 | a | M | 52 | 60 |
5 | b | M | 38 | 82 |
# 使用自定义的聚合函数计算每个分组的最大值和最小值
def custom_agg(x):
return x.max() - x.min()
result = df[['B','C']].groupby('B').agg({'C': custom_agg})
result
C | |
---|---|
B | |
L | 70 |
M | 101 |
N | 0 |
补充2: 开窗函数(类似于SQL里面的over partition by
):
使用transform函数计算每个分组的均值
# 使用transform函数计算每个分组的均值
df['B_C_std'] = df[['B','C']].groupby('B')['C'].transform('mean')
df
A | B | C | D | B_C_std | |
---|---|---|---|---|---|
0 | a | L | 107 | 22 | 142.000000 |
1 | b | L | 177 | 59 | 142.000000 |
2 | a | M | 139 | 38 | 76.333333 |
3 | b | N | 3 | 50 | 3.000000 |
4 | a | M | 52 | 60 | 76.333333 |
5 | b | M | 38 | 82 | 76.333333 |
补充3: 分组聚合拼接字符串 pandas实现类似 group_concat 功能
假设有这样一个数据:
df = pd.DataFrame({
'姓名': ['张三', '张三', '张三', '李四', '李四', '李四'],
'科目': ['语文', '数学', '英语', '语文', '数学', '英语']
})
df
姓名 | 科目 | |
---|---|---|
0 | 张三 | 语文 |
1 | 张三 | 数学 |
2 | 张三 | 英语 |
3 | 李四 | 语文 |
4 | 李四 | 数学 |
5 | 李四 | 英语 |
补充:按某列分组,将另一列文本拼接合并
按名称分组,把每个人的科目拼接到一个字符串:
# 对整个group对象中的所有列应用join 连接元素
(df.astype(str)# 先将数据全转为字符
.groupby('姓名')# 分组
.agg(lambda x : ','.join(x)))[['科目']]# join 连接元素
科目 | |
---|---|
姓名 | |
张三 | 语文,数学,英语 |
李四 | 语文,数学,英语 |
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
如何构建数据分析整体框架? 要让数据分析发挥其最大效能,建立一个清晰、完善的整体框架至关重要。今天,就让我们一同深入探讨 ...
2024-12-27AI来了,数分人也可以很省力,今天给大家介绍7个AI+数据分析工具,建议收藏。 01酷表 EXCEL 网址:https://chatexcel.com/ 这是 ...
2024-12-26一个好的数据分析模型不仅能使分析具备条理性和逻辑性,而且还更具备结构化和体系化,并保证分析结果的有效性和准确性。好的数据 ...
2024-12-26当下,AI 的发展堪称狂飙猛进。从 ChatGPT 横空出世到各种大语言模型(LLM)接连上线,似乎每个人的朋友圈都在讨论 AI 会不会“ ...
2024-12-26数据分析师这个职业已经成为了职场中的“香饽饽”,无论是互联网公司还是传统行业,都离不开数据支持。想成为一名优秀的数据分析 ...
2024-12-26在数据驱动决策成为商业常态的今天,数据分析师这一职业正迎来前所未有的机遇与挑战。很多希望转行或初入职场的人士不禁询问:数 ...
2024-12-25数据分析师,这一近年来炙手可热的职业,吸引了大量求职者的注意。凭借在大数据时代中的关键作用,数据分析师不仅需要具备处理数 ...
2024-12-25在当今数字化变革的浪潮中,数据分析师这一职业正迎来前所未有的发展机遇。回想我自己初入数据分析行业时,那种既兴奋又略显谨慎 ...
2024-12-25在当今信息爆炸的时代,数据已经像空气一样无处不在,而数据分析则是解锁这些信息宝藏的钥匙。数据分析的过程就像是一次探险,从 ...
2024-12-25在职场上,拍脑袋做决策的时代早已过去。数据分析正在成为每个职场人的核心竞争力,不仅能帮你找到问题,还能提供解决方案,提升 ...
2024-12-24Excel是数据分析的重要工具,强大的内置功能使其成为许多分析师的首选。在日常工作中,启用Excel的数据分析工具库能够显著提升数 ...
2024-12-23在当今信息爆炸的时代,数据分析师如同一位现代社会的侦探,肩负着从海量数据中提炼出有价值信息的重任。在这个过程中,掌握一系 ...
2024-12-23在现代的职场中,制作吸引人的PPT已经成为展示信息的重要手段,而其中数据对比的有效呈现尤为关键。为了让数据在幻灯片上不仅准 ...
2024-12-23在信息泛滥的现代社会,数据分析师已成为企业决策过程中不可或缺的角色。他们的任务是从海量数据中提取有价值的洞察,帮助组织制 ...
2024-12-23在数据驱动时代,数据分析已成为各行各业的必需技能。无论是提升个人能力还是推动职业发展,选择一条适合自己的学习路线至关重要 ...
2024-12-23在准备数据分析师面试时,掌握高频考题及其解答是应对面试的关键。为了帮助大家轻松上岸,以下是10个高频考题及其详细解析,外加 ...
2024-12-20互联网数据分析师是一个热门且综合性的职业,他们通过数据挖掘和分析,为企业的业务决策和运营优化提供强有力的支持。尤其在如今 ...
2024-12-20在现代商业环境中,数据分析师是不可或缺的角色。他们的工作不仅仅是对数据进行深入分析,更是协助企业从复杂的数据信息中提炼出 ...
2024-12-20随着大数据时代的到来,数据驱动的决策方式开始受到越来越多企业的青睐。近年来,数据分析在人力资源管理中正在扮演着至关重要的 ...
2024-12-20在数据分析的世界里,表面上的技术操作只是“入门票”,而真正的高手则需要打破一些“看不见的墙”。这些“隐形天花板”限制了数 ...
2024-12-19