【Python常用函数】一文让你彻底掌握Python中的groupby函数

文摘   教育   2024-08-25 17:19   广东  

在风险管理中不管是做模型还是做策略,都需要进行数据分析。

而数据分析的基础是学好编程语言,本文和你一起来探索groupby函数,让你以最短的时间明白这个函数的原理。

也可以利用碎片化的时间巩固这个函数,让你在处理工作过程中更高效。

本文目录
  1. groupby函数定义

  2. query函数实例

    2.1 实例1

    2.2 实例2

    2.3 实列3

    2.4 实列4


、groupby函数定义
在pandas库中,groupby方法是一个非常强大的工具,用于将数据分割成组,并对这些组应用一些计算。
其基本调用语法如下:
groupby(by=None, axis=0, level=None, as_index: bool = True, sort: bool = True, group_keys: bool = True, squeeze: bool = <object object at 0x0000021CBA4B0C80>, observed: bool = False, dropna: bool = True)

重要参数详解:

by:指定用于分组的列名或列名的列表,默认值None,表示尝试使用对象的索引进行分组。此外,它也可以是一个函数,用于根据DataFrame中的值动态确定分组键。

axis:指定分组的轴,对于DataFrame,0表示沿着行的方向分组(即按列的值分组),而1表示沿着列的方向分组(实际中较少见),默认值0。

level:如果轴是MultiIndex(多级索引),则此参数用于指定要分组的级别。默认值None,表示使用所有级别。

as_index指定分组后的结果是否作为DataFrame的索引。布尔值,默认值True,表示分组的键将作为结果DataFrame的索引。如果为False,则结果的DataFrame将有一个额外的索引级别,其标签为分组键。

sort指定分组结果是否按照分组列进行排序。布尔值,默认值True。在某些情况下,关闭排序可以提高性能,尤其当分组键已经排序时。

group_keys:指定分组后是否保留分组键,布尔值,默认True,表示结果DataFrame将包含用于分组的键的列。如果为False,则不会添加这些列。

squeeze在pandas较新版本中,该参数可能已经被弃用或其行为可能有所变化。它通常用于在分组操作后尝试减少结果的维度(例如,若分组后只剩下一个元素,则尝试返回一个标量而不是Series)。然而,具体的行为可能因pandas版本而异。


二、groupby函数实例

1   实例1

首先生成一个含有Group和Value两列的数据框,具体代码如下:

import pandas as pd    # 创建一个DataFrame  data = {      'Group': ['A', 'B', 'A', 'B', 'A', 'C'],      'Value': [1, 2, 3, 4, 5, 6]  }  df = pd.DataFrame(data)  print(df)
得到结果:

接着用groupby函数分组求和,代码如下:
# 分组求和grouped = df.groupby('Group')['Value'].sum()  print(grouped)
得到结果:

可以手动验证结果是一致的
如果想分组求均值,代码如下:
# 分组求均值print(df.groupby('Group')['Value'].mean())
得到结果:

可以手动验证结果是一致的
如果想一次使用多个聚合函数,代码如下:
grouped_agg = df.groupby('Group').agg({'Value': ['sum', 'mean']})  print(grouped_agg)
得到结果:


  实例2

首先生成一个含有多列的DataFrame,具体代码如下:

import numpy as npimport pandas as pd 
data = pd.DataFrame({ 'name':['Tom', 'Kaggle', 'Litter', 'Sam', 'Sam', 'Sam'], 'city':['BeiJing', 'HuNan', 'ShangHai', 'BeiJing', 'HeiNan', 'HuNan'], 'race':['A', 'A', 'D', 'C', 'B', 'C'], 'age':[27, 25, 16, 17, 28, 24], 'height':[174, 180, 172, 182, 170, 178]})display(data)
得到结果:

可以发现对于name列,除了Sam出现了三次,其余名字都只出现了一次。
接着看下按race列分组后的数据,具体代码如下:
list(data.groupby('race'))
得到结果:

可以发现,结果按A、B、C、D分别梳理出对应数据并存成了元组。
接下来看下分组后对多列求均值,代码如下:
data.groupby('race')[['age', 'height']].mean()
得到结果:

可以手动验证结果是一致的。
接着看下分组后对不同组分别求聚合函数,代码如下:
data.groupby('race').agg({'age':np.min, 'height':np.mean})
得到结果:

按race列分组后,对age列求最小值,对height列求均值,可以手动验证结果是一致的。

接着把goupby函数和apply函数结合使用,按姓名列分组,取每组前两行,代码如下:

data.groupby('name').apply(lambda x:x.head(2))
得到结果:

从结果知,由于其他名字都只有一行,取前两行时结果都保留,只有Sam有3行,取前两行则少了最后一行。


  实例3

这一节对比as_index值为True(默认值)和False对结果的影响,首先沿用前面的数据框,来看下False的情况,代码如下:

data.groupby('race',as_index=False)['age'].mean()
得到结果:

接着看下as_index值为True的情况,代码如下:
data.groupby('race',as_index=True)['age'].mean()
得到结果:

从结果知,as_index的作用是把分组变量是否当成索引,如果值为True则当成索引。


  实例4

最后来对比一下sort值为True(默认值)和False的情况,如果值为False,代码如下:

data.groupby('race',sort=False)['age'].mean()
得到结果:

可以发现结果没有按分组变量进行排序。
接着看下sort值为True的情况,代码如下:
data.groupby('race', sort=True)['age'].mean()
得到结果:

可以发现结果已按分组变量race进行分组。

至此,Python中的groupby函数已讲解完毕,如想了解更多Python中的函数,可以翻看公众号中“学习Python”模块相关文章。

【部分群限时免费进分群讨论学习Python、玩转Python、风控建模【29.9元进】、人工智能、数据分析相关问题,还提供练习数据资料招聘内推信息、优秀文章、学习视频、公众号文章答疑,也可交流工作中遇到的难题。如需添加微信号19967879837,加时备注想进的群,比如学习python。

往期回顾:
信贷风控架构一张图

一文囊括Python中的函数,持续更新。。。

一文囊括Python中的有趣案例,持续更新。。。

【评分卡实现】应用Python中的toad.ScoreCard函数实现评分卡

【Python常用函数】一文让你彻底掌握Python中的toad.quality函数

【Python数据挖掘】应用toad包中的KS_bucket函数统计好坏样本率、KS值



限时免费进群

19967879837

添加微信号、手机号

阿黎逸阳的代码
阿黎逸阳,分享大数据和人工智能领域知识,提供风控建模干货经验。 博主履历:世界五百强公司、互联网上市公司、高校、外资银行,多年研究大数据分析、建模以及教学工作。
 最新文章