Joyful Pandas--Task03分组

Pandas知识点-详解聚合函数agg pandas系列:聚合函数agg() 阅读详情

学习来源:https://nbviewer.jupyter.org/github/GYHHAHA/Joyful-Pandas/blob/master/第3章%20分组.ipynb

一、SAC过程

  1. 内涵
    SAC指的是分组操作中的split-apply-combine过程
    其中split指基于某一些规则,将数据拆成若干组,apply是指对每一组独立地使用函数,combine指将每一组的结果组合成某一类数据结构
  2. apply过程
    在该过程中,我们实际往往会遇到四类问题:
    整合(Aggregation)——即分组计算统计量(如求均值、求每组元素个数)
    变换(Transformation)——即分组对每个单元的数据进行操作(如元素标准化)
    过滤(Filtration)——即按照某些规则筛选出一些组(如选出组内某一指标小于50的组)
    综合问题——即前面提及的三种问题的混合二、groupby函数
  3. 分组函数的基本内容:
#(a)根据某一列分组
grouped_single = df.groupby('School')
#经过groupby后会生成一个groupby对象,该对象本身不会返回任何东西,只有当相应的方法被调用才会起作用¶
#例如取出某一个组
grouped_single.get_group('S_1').head()
#(b)根据某几列分组
grouped_mul = df.groupby(['School','Class'])
grouped_mul.get_group(('S_2','C_4'))
#(c)组容量与组数
grouped_single.size()
grouped_mul.size()
grouped_single.ngroups
grouped_mul.ngroups
#(d)组的遍历
for name,group in grouped_single:
    print(name)
    display(group.head())
S_1
S_2
#(e)level参数(用于多级索引)和axis参数
df.set_index(['Gender','School']).groupby(level=1,axis=0).get_group('S_1').head()
  1. groupby对象的特点
#(a)查看所有可调用的方法
#由此可见,groupby对象可以使用相当多的函数,灵活程度很高
print([attr for attr in dir(grouped_single) if not attr.startswith('_')])
#(b)分组对象的head和first
#对分组对象使用head函数,返回的是每个组的前几行,而不是数据集前几行
grouped_single.head(2)
#first显示的是以分组为索引的每组的第一个分组信息
grouped_single.first()
#(c)分组依据
#对于groupby函数而言,分组的依据是非常自由的,只要是与数据框长度相同的列表即可,同时支持函数型分组
df.groupby(np.random.choice(['a','b','c'],df.shape[0])).get_group('a').head()
#相当于将np.random.choice(['a','b','c'],df.shape[0])当做新的一列进行分组
#从原理上说,我们可以看到利用函数时,传入的对象就是索引,因此根据这一特性可以做一些复杂的操作
df[:5].groupby(lambda x:print(x)).head(0)
df.groupby(lambda x:'奇数行' if not df.index.get_loc(x)%2==1 else '偶数行').groups
#如果是多层索引,那么lambda表达式中的输入就是元组,下面实现的功能为查看两所学校中男女生分别均分是否及格¶
#注意:此处只是演示groupby的用法,实际操作不会这样写
math_score = df.set_index(['Gender','School'])['Math'].sort_index()
grouped_score = df.set_index(['Gender','School']).sort_index().\
            groupby(lambda x:(x,'均分及格' if math_score[x].mean()>=60 else '均分不及格'))
for name,_ in grouped_score:print(name)
#(d)groupby的[]操作
#可以用[]选出groupby对象的某个或者某几个列,上面的均分比较可以如下简洁地写出:
#用列表可选出多个属性列:
df.groupby(['Gender','School'])[['Math','Height']].mean()
#(e)连续型变量分组
#例如利用cut函数对数学成绩分组:
bins = [0,40,60,80,90,100]
cuts = pd.cut(df['Math'],bins=bins) #可选label添加自定义标签
df.groupby(cuts)['Math'].count()

三、聚合、过滤和变换

  1. 聚合(Aggregation)
#(a)常用聚合函数
#所谓聚合就是把一堆数,变成一个标量,因此mean/sum/size/count/std/var/sem/describe/first/last/nth/min/max都是聚合函数
#为了熟悉操作,不妨验证标准误sem函数,下面进行验证:
group_m = grouped_single['Math']
group_m.std().values/np.sqrt(group_m.count().values)== group_m.sem().values
#(b)同时使用多个聚合函数
group_m.agg(['sum','mean','std'])
#利用元组进行重命名
group_m.agg([('rename_sum','sum'),('rename_mean','mean')])
#指定哪些函数作用哪些列
grouped_mul.agg({'Math':['mean','max'],'Height':'var'})
#(c)使用自定义函数
grouped_single['Math'].agg(lambda x:print(x.head(),'间隔'))
#可以发现,agg函数的传入是分组逐列进行的,有了这个特性就可以做许多事情
#官方没有提供极差计算的函数,但通过agg可以容易地实现组内极差计算
grouped_single['Math'].agg(lambda x:x.max()-x.min())
#(d)利用NamedAgg函数进行多个聚合
#注意:不支持lambda函数,但是可以使用外置的def函数
def R1(x):
    return x.max()-x.min()
def R2(x):
    return x.max()-x.median()
grouped_single['Math'].agg(min_score1=pd.NamedAgg(column='col1', aggfunc=R1),
                           max_score1=pd.NamedAgg(column='col2', aggfunc='max'),
                           range_score2=pd.NamedAgg(column='col3', aggfunc=R2)).head()
#(e)带参数的聚合函数
#判断是否组内数学分数至少有一个值在50-52之间:
def f(s,low,high):
    return s.between(low,high).max()
grouped_single['Math'].agg(f,50,52)
#如果需要使用多个函数,并且其中至少有一个带参数,则使用wrap技巧:
def f_test(s,low,high):
    return s.between(low,high).max()
def agg_f(f_mul,name,*args,**kwargs):
    def wrapper(x):
        return f_mul(x,*args,**kwargs)
    wrapper.__name__ = name
    return wrapper
new_f = agg_f(f_test,'at_least_one_in_50_52',50,52)
grouped_single['Math'].agg([new_f,'mean']).head()
  1. 过滤(Filteration)
#filter函数是用来筛选某些组的(务必记住结果是组的全体),因此传入的值应当是布尔标量
grouped_single[['Math','Physics']].filter(lambda x:(x['Math']>32).all()).head()
  1. 变换(Transformation)
#(a)传入对象
#transform函数中传入的对象是组内的列,并且返回值需要与列长完全一致
grouped_single[['Math','Height']].transform(lambda x:x-x.min()).head()
#如果返回了标量值,那么组内的所有元素会被广播为这个值¶
grouped_single[['Math','Height']].transform(lambda x:x.mean()).head()
#(b)利用变换方法进行组内标准化¶
grouped_single[['Math','Height']].transform(lambda x:(x-x.mean())/x.std()).head()
#(c)利用变换方法进行组内缺失值的均值填充¶
df_nan = df[['Math','School']].copy().reset_index()
df_nan.loc[np.random.randint(0,df.shape[0],25),['Math']]=np.nan
df_nan.head()
df_nan.groupby('School').transform(lambda x: x.fillna(x.mean())).join(df.reset_index()['School']).head()

四、apply函数

  1. apply函数的灵活性
    可能在所有的分组函数中,apply是应用最为广泛的,这得益于它的灵活性:
    对于传入值而言,从下面的打印内容可以看到是以分组的表传入apply中:
df.groupby('School').apply(lambda x:print(x.head(1)))

apply函数的灵活性很大程度来源于其返回值的多样性:

#① 标量返回值
df[['School','Math','Height']].groupby('School').apply(lambda x:x.max())
#② 列表返回值
df[['School','Math','Height']].groupby('School').apply(lambda x:x-x.min()).head()
#③ 数据框返回值
df[['School','Math','Height']].groupby('School')\
    .apply(lambda x:pd.DataFrame({'col1':x['Math']-x['Math'].max(),
                                  'col2':x['Math']-x['Math'].min(),
                                  'col3':x['Height']-x['Height'].max(),
                                  'col4':x['Height']-x['Height'].min()})).head()
  1. 用apply同时统计多个指标
    此处可以借助OrderedDict工具进行快捷的统计:
from collections import OrderedDict
def f(df):
    data = OrderedDict()
    data['M_sum'] = df['Math'].sum()
    data['W_var'] = df['Weight'].var()
    data['H_mean'] = df['Height'].mean()
    return pd.Series(data)
grouped_single.apply(f)
【编程实践】Joyful-Pandas(下)Task01(第六章):缺失数据 【编程实践】Joyful-Pandas(下)Task01(第六章):缺失数据Datawhale学习要求Nullable类型与NA符号缺失数据的运算与分组填充与剔除插值(interpolation)问题练习 缺失数据和文本数据(尤其是混杂性文本)是数据预处理中比较麻烦的类型,本章节聚焦于缺失数据。 Nullable类型和String类型可能在未来成为Pandas的主流数据类型。 Datawhale学习要求 理论部分 理解Nullable类型与NA符号 掌握缺失值的填充与剔除 掌握常见缺失值插值方法 练习部 阅读详情

相关推荐

Pandas详解二十五之聚合运算agg

约定: import pandas as pd 聚合运算 在数据分析中,对数据聚合(求和、平均值等)通常是不可避免的。在将数据分组(groupby)后,新手若不知函数 agg() 的情况下,很有可能写出二三十行的for循环只为求每个分组的平均值。在这里,介绍个强大的函数:agg() ,能让你的代码缩减到一行。 创建对象和分组 df1=pd.DataFrame...

yungeisme的博客 1万+

pandas-组操作-拆分-应用-组合(groupby)(二)

1. 使用agg实现一次应用多个函数

qq_14815199的博客 308

立创开源便携式多生理参数监护仪:基于STM32H743与ADS1292R的心电血氧体温监测系统设计

本文详细解析了基于STM32H743与ADS1292R的便携式多生理参数监护仪开源设计。项目集成了心电、血氧和体温监测功能,采用模块化硬件架构,并重点介绍了利用FIR滤波和Pan-Tompkins算法进行心电信号处理的核心技术。文章提供了完整的复刻指南与避坑要点,是学习医疗电子设备设计的优秀实践案例。

weixin_30600615的博客 328

详解Pandas聚合函数agg

func: 用于聚合数据的函数,如max()、mean()、count()等,函数必须满足传入一个DataFrame能正常使用,或传递到DataFrame.apply()中能正常使用。本文介绍的聚合函数为DataFrame.aggregate(),别名DataFrame.agg(),aggregate()和agg()是同一个函数,仅名字不同。在agg()中,可以用列表的方式传入多个函数,会将这些函数在每一列的执行结果聚合到一个DataFrame中,结果DataFrame中的索引为对应的函数名。

金戈鐡馬 4207

蓝桥杯单片机学习13——NE555方波发生器&频率测量

NE555详解、引脚图介绍、原理图及工作原理讲解、方波产生的原理、定时器测量频率的原理及使用方法、代码实现

weixin_67907028的博客 1万+

遥感数据下载——FIRM:VIIRS火点数据、MODIS火点数据简介及下载

一、FIRMS(Fire Information for Resoutce Management System) 网站链接:https://firms.modaps.eosdis.nasa.gov/map/ 这个网站上对VIIRS及MODIS的火灾数据进行了显示,可以进行按日期、产品类别等动态的展示火点数据或火烧迹地,同时也提供了数据下载控件。高级选择中还可以进行数据统计结果展示。 二、VIIR...

knkn123的博客 3万+

pandas task03

一、groupby函数 1. groupby分组函数的基本内容 单/多列分组 经过groupby后会生成一个groupby对象,该对象本身不会返回任何东西,只有当相应的方法被调用才会起作用。 grouped_single = df.groupby('School') print(grouped_single) print(grouped_single.get_group('S_1').head(...

zigzag_gy的博客 420

Mamba vs YOLO:目标检测选型指南(附实际项目对比)

本文深入对比了Mamba和YOLO在目标检测领域的性能差异与应用场景。通过实际项目数据,分析了两者在城市交通监控、工业质检等场景下的表现,提供了详细的选型指南和部署优化建议,帮助开发者根据实时性、精度等需求选择最适合的解决方案。

weixin_29062255的博客 369

Pandas agg()函数介绍及命名聚合

agg()函数是 Pandas 库中的一个非常强大的函数,用于执行聚合操作。在 Pandas 中,聚合通常指的是对一组值执行某种计算以返回一个单一的值,例如求和、平均值、最大值、最小值等。 agg()函数可以应用于 Pandas 的Series、DataFrame或GroupBy对象。它允许你灵活地应用一个或多个聚合函数到数据上。命名聚合(Named Aggregation)是 Pandas 库中一种特殊的聚合方式,主要用于在 GroupBy 操作中更清晰、明确地指定聚合操作的输出列名以及对应的

YOU CAN IF YOU BELIEVE YOU CAN 2539

GBDT算法详解

本文详细介绍了GBDT算法的原理和特点,并展示了其在回归和分类任务中的应用。首先介绍了GBDT算法的基本思想和公式,然后展示了如何在回归数据集使用GBDT进行回归任务,以及如何在分类数据集上使用GBDT进行文本分类任务。

甜盐的博客 2541

粒子群优化与蚁群算法求解多旅行商问题

它要求在给定一组城市和旅行商之间的距离矩阵的情况下,找到一条最优的路径方案,使得所有旅行商可以分别从起始城市出发,途径其他城市,并最终回到起始城市,同时总旅行距离达到最小。这两种算法都是基于群体智能的优化算法,在求解组合优化问题时具有较好的性能表现。假设有n个城市需要被m个旅行商访问,城市间的距离由距离矩阵D表示,其中D(i,j)表示第i个城市到第j个城市的距离。粒子群优化算法是一种基于群体智能的优化算法,其中的粒子代表了潜在的解,并通过模拟粒子在解空间中的移动来搜索最优解。一、多旅行商问题建模。

m0_47037246的博客 553

【Python】pandas分组8个常用技巧!

pandas的groupby是数据处理中一个非常强大的功能。虽然很多同学已已经非常熟悉了,但有些小技巧还是要和大家普及一下的。为了给大家演示,我们采用一个公开的数据集进行说明。importpandasaspd iris=pd.read_csv('https://raw.githubusercontent.com/mwaskom/seaborn-data/master/iris.csv')...

fengdu78的博客 322

YOLOv10涨点改进:SPPF原创自研创新 | SPPF创新结构,重新设计全局平均池化层和全局最大池化层,增强全局视角信息和不同尺度大小的特征

SPPF原创自研创新

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 2087

agg

1.利用NamedAgg函数进行多个聚合 注意:不支持lambda函数,但是可以使用外置的def函数 In [27]: def R1(x): return x.max()-x.min() def R2(x): return x.max()-x.median() grouped_single['Math'].agg(min_score1=pd.NamedAgg(column='col1', aggfunc=R1), max_score1=p

qq_44601916的博客 360

【腾讯小龙虾WorkBuddy专栏05】深度解析WorkBuddy连接器(Connector)

深度解析WorkBuddy连接器(Connector)

AI人人懂 1318

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

【Pandas】【分组操作】

分组简介分组操作流程有三:**split , apply , combine**常见apply过程的问题groupby函数1.按照某一列来分组获得某个school的信息:2.按照多列来分组3.其他调用方法4. 可通过一下代码查看groupby对象可用的函数5. groupby对象的head和first6. 分组的依据规则根据奇偶行分组若使用的是多层索引,则lambda表达式中输入为元组groupby中的[]操作对连续性变量使用cut函数做分组聚合(Aggregation)常用聚合函数同时使用单个或多个聚合函

zyuPp的博客 3652

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

快乐学习Pandas-分组

详细内容可以参考:https://github.com/datawhalechina/joyful-pandas第三章内容 本文将就可能理解起来会有问题的几个内容进行介绍。 一、SAC过程 1. 内涵 SAC指的是分组操作中的split-apply-combine过程 其中split指基于某一些规则,将数据拆成若干组,apply是指对每一组独立地使用函数,combine指将每一组的结果组合成某一类...

water19111213的博客 482

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

【Python】Pandas中的宝藏函数-agg()

利用agg()函数可以进行更灵活的聚合操作Pandas中的的agg()函数为aggregate的缩写,总数、合计、聚合的意思,是一个功能非常强大的函数,在Pandas中可以利用agg()对...

fengdu78的博客 1万+

Pandas高级教程之:GroupBy用法

pandas中的DF数据类型可以像数据库表格一样进行groupby操作。通常来说groupby操作可以分为三部分:分割数据,应用变换和和合并数据。

程序那些事 8909

python pandas中的agg函数

python中的agg函数通常用于调用groupby()函数之后,对数据做一些聚合操作,包括sum,min,max以及其他一些聚合函数 如下所示: >>> df = pd.read_excel(r"D:/myExcel/1.xlsx") >>> df A B C 0 bob 12 45 1 millor 15 23 2 ...

weixin_45144170的博客 2万+

Pandas0.25来了,别错过这10大好用的新功能

本文转载自Python大咖谈呆鸟云:“7 月 18 日,Pandas 团队推出了 Pandas 0.25 版,这就相当于 Python 3.8 啦,Python 数据分析...

涛哥聊Python 929

【pandas】聚合函数agg的用法

作用 在groupby分出的各组数据中求(多个)函数的值 参数类型 function, string, dictionary, or list of string/functions 示例 参数是function import pandas as pd data = pd.DataFrame([['0902', 89, 92, 88, 90], ['0903', 91, 95, 88, 98], ['0903', 84, 81

weixin_43298886的博客 4453

Python - pandas - groupby+agg聚合重命名解决办法

目录 1.数据准备 2.聚合重命名的几种方法 1.数据准备 import pandas as pd df = pd.read_csv('/data/Mall_Customers_nom.csv') df.head() as_index默认为True,即返回以组标签作为索引的对象。下例,Gender作为索引返回。 gender_df = df.groupby("Gender", as_index=True).agg({'CustomerID':'count'}) gender..

摸鱼同学的博客 1万+

python groupby agg_使用pandas GroupBy.agg()对同一列进行多次聚合

大熊猫> = 0.25:命名汇总熊猫已经改变了行为,GroupBy.agg转而使用更直观的语法来指定命名聚合。请参阅0.25文档部分中的增强功能以及相关的GitHub问题GH18366和GH26512。从文档中为了通过控制输出列名来支持特定于列的聚合,pandas接受特殊的语法GroupBy.agg(),称为“命名聚合”,其中关键字是输出列名称值是元组,其第一个元素是要选择的列,第二个元素是...

weixin_39572168的博客 2048

不再纠结,一文详解pandas中的map、apply、applymap、groupby、agg...

点击蓝字关注我,有干货领取!文章的数据和代码都已上传至我的github仓库:https://github.com/CNFeffery/DataScienceStudyNotes一、简介p...

Eric_data的博客 1492

groupby2

pandas groupby

weixin_43522964的博客 188
上一篇: 机器学习基础-Task3 EM算法
下一篇: 机器学习基础——Task4 条件随机场
Simone_future
博客等级 码龄7年 0粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值