【Python】Pandas Groupby操作的25个示例

这篇具有很好参考价值的文章主要介绍了【Python】Pandas Groupby操作的25个示例。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


在日常的数据分析中,经常需要将数据根据某个(多个)字段划分为不同的群体(group)进行分析,如电商领域将全国的总销售额根据省份进行划分,分析各省销售额的变化情况,社交领域将用户根据画像(性别、年龄)进行细分,研究用户的使用情况和偏好等。在Pandas中,上述的数据处理操作主要运用groupby完成,本文就介绍一下 groupby的基本原理及对应的 aggtransformapply等操作,总共包含25个代码示例。

首先,模拟生成10个样本数据:

import pandas as pd
import numpy as np

company=["A","B","C"]
data=pd.DataFrame({
    "company":[company[x] for x in np.random.randint(0,len(company),10)],
    "salary":np.random.randint(5,50,10),
    "age":np.random.randint(15,50,10)
    }
)

python groupby()函数举例,Python编程实战与案例,pandas,python,数据分析,groupby,apply

1. Groupby的基本原理

在pandas中,实现分组操作的代码很简单,仅需一行代码,在这里,将上面的数据集按照company字段进行划分:
python groupby()函数举例,Python编程实战与案例,pandas,python,数据分析,groupby,apply
这个生成的DataFrameGroupBy是啥呢?对data进行了groupby后发生了什么?ipython所返回的结果是其内存地址,并不利于直观地理解,为了看看group内部究竟是什么,这里把group转换成list的形式来看一看:
python groupby()函数举例,Python编程实战与案例,pandas,python,数据分析,groupby,apply
转换成列表的形式后,可以看到,列表由三个元组组成,每个元组中,第一个元素是组别(这里是按照company进行分组,所以最后分为了A,B,C),第二个元素的是对应组别下的DataFrame,整个过程可以图解如下:
python groupby()函数举例,Python编程实战与案例,pandas,python,数据分析,groupby,apply

总结来说,groupby的过程就是将原有的DataFrame按照groupby的字段(这里是company),划分为若干个分组DataFrame,被分为多少个组就有多少个分组DataFrame。所以说,在groupby之后的一系列操作(如agg、apply等),均是基于子DataFrame的操作。理解了这点,也就基本摸清了Pandas中groupby操作的主要原理。

2. agg聚合操作

聚合操作是groupby操作之后非常常见的操作。聚合操作可以用来求和、均值、最大值、最小值等,下面的表格列出了Pandas中常见的聚合操作。
python groupby()函数举例,Python编程实战与案例,pandas,python,数据分析,groupby,apply
针对样例数据集,如果想求不同公司员工的平均年龄和平均薪水,可以按照下方的代码进行:
python groupby()函数举例,Python编程实战与案例,pandas,python,数据分析,groupby,apply
如果想对针对不同的列求不同的值,比如要计算不同公司员工的平均年龄以及薪水的中位数,可以利用字典进行聚合操作的指定:
python groupby()函数举例,Python编程实战与案例,pandas,python,数据分析,groupby,apply
agg聚合过程可以图解如下(第二个例子为例):
python groupby()函数举例,Python编程实战与案例,pandas,python,数据分析,groupby,apply

3. transform

transform是一种什么数据操作?和agg有什么区别呢?为了更好地理解transform和agg的不同,下面从实际的应用场景出发进行对比。

在上面的agg中,我们知道了如何求不同公司员工的平均薪水,如果现在需要在原数据集中新增一列avg_salary,代表员工所在的公司的平均薪水(相同公司的员工具有一样的平均薪水),该怎么实现呢?如果按照正常的步骤来计算,需要先求得不同公司的平均薪水,然后按照员工和公司的对应关系填充到对应的位置,不用transform的话,实现代码如下:
python groupby()函数举例,Python编程实战与案例,pandas,python,数据分析,groupby,apply
如果使用transform的话,仅需要一行代码:
python groupby()函数举例,Python编程实战与案例,pandas,python,数据分析,groupby,apply
还是以图解的方式来看看进行groupby后transform的实现过程(为了更直观展示,图中加入了company列,实际按照上面的代码只有salary列):
python groupby()函数举例,Python编程实战与案例,pandas,python,数据分析,groupby,apply
图中的大方框是transform和agg所不一样的地方,对agg而言,会计算得到A,B,C公司对应的均值并直接返回,但对transform而言,则会对每一条数据求得相应的结果,同一组内的样本会有相同的值,组内求完均值后会按照原索引的顺序返回结果,如果有不理解的可以拿这张图和agg那张对比一下。

4. apply

apply应该是大家的老朋友了,它相比agg和transform而言更加灵活,能够传入任意自定义的函数,实现复杂的数据操作。那么问题来了,在groupby后使用apply和groupby之前使用有什么区别呢?

区别是有的,但是整个实现原理是基本一致的。两者的区别在于,对于groupby后的apply,以分组后的子DataFrame作为参数传入指定函数的,基本操作单位是DataFrame,而之前介绍的apply的基本操作单位是Series。还是以一个案例来介绍groupby后的apply用法。

假设现在需要获取各个公司年龄最大的员工的数据,该怎么实现呢?可以用以下代码实现:
python groupby()函数举例,Python编程实战与案例,pandas,python,数据分析,groupby,apply
这样便得到了每个公司年龄最大的员工的数据,整个流程图解如下:
python groupby()函数举例,Python编程实战与案例,pandas,python,数据分析,groupby,apply
最后,关于apply的使用,这里有个小建议,虽然说apply拥有更大的灵活性,但apply的运行效率会比agg和transform更慢。所以,groupby之后能用agg和transform解决的问题还是优先使用这两个方法,实在解决不了了才考虑使用apply进行操作。

5. 25个代码示例

1. 单列聚合

计算出每个company的平均salary:
python groupby()函数举例,Python编程实战与案例,pandas,python,数据分析,groupby,apply

2. 多列聚合

在一个操作中进行多个聚合。下面是计算每个company的平均薪资和年龄:
python groupby()函数举例,Python编程实战与案例,pandas,python,数据分析,groupby,apply
注意,这里使用的是双方括号“[[]]”。

3. 多方式聚合

使用agg函数来计算多个聚合值:
python groupby()函数举例,Python编程实战与案例,pandas,python,数据分析,groupby,apply

4. 对聚合结果进行命名

可以对聚合的结果进行命名:
python groupby()函数举例,Python编程实战与案例,pandas,python,数据分析,groupby,apply

5. 多个聚合和多个函数

python groupby()函数举例,Python编程实战与案例,pandas,python,数据分析,groupby,apply

6. 不同列的聚合进行命名

python groupby()函数举例,Python编程实战与案例,pandas,python,数据分析,groupby,apply

7. as_index参数

如果groupby操作的输出是DataFrame,可以使用as_index参数使它们成为DataFrame中的一列。
python groupby()函数举例,Python编程实战与案例,pandas,python,数据分析,groupby,apply

8. 用于分组的多列

就像可以聚合多个列一样,也可以使用多个列进行分组。

sales.groupby(["store","product_group"], as_index=False).agg(avg_sales = ("last_week_sales", "mean")).head()

python groupby()函数举例,Python编程实战与案例,pandas,python,数据分析,groupby,apply

9. 排序输出

可以使用sort_values函数根据聚合列对输出进行排序.

sales.groupby(["store","product_group"], as_index=False).agg(avg_sales = ("last_week_sales", "mean")).sort_values(by='avg_sales', ascending=False).head()

python groupby()函数举例,Python编程实战与案例,pandas,python,数据分析,groupby,apply

10. 最大的Top N

max函数返回每个组的最大值。如果需要n个最大的值,可以用下面的方法:
python groupby()函数举例,Python编程实战与案例,pandas,python,数据分析,groupby,apply

11. 最小的Top N

与最大值相似,也可以求最小值
python groupby()函数举例,Python编程实战与案例,pandas,python,数据分析,groupby,apply

12. 第n个值

还可以找到一组中的第n个值,例如,找到每个company中年龄第2的薪水:
python groupby()函数举例,Python编程实战与案例,pandas,python,数据分析,groupby,apply

13. 第n个值,倒排序

也可以用负的第n项。例如," nth(-2) "返回从末尾开始的第二行。
python groupby()函数举例,Python编程实战与案例,pandas,python,数据分析,groupby,apply

14. 唯一值

unique函数可用于查找每组中唯一的值。例如,可以找到每个company中唯一的年龄,代码如下:
python groupby()函数举例,Python编程实战与案例,pandas,python,数据分析,groupby,apply

15. 唯一值的数量

可以使用nunique函数找到每组中唯一值的数量:
python groupby()函数举例,Python编程实战与案例,pandas,python,数据分析,groupby,apply

16. Lambda表达式

可以在agg函数中使用lambda表达式作为自定义聚合操作
python groupby()函数举例,Python编程实战与案例,pandas,python,数据分析,groupby,apply

17. apply函数

使用apply函数将Lambda表达式应用到每个组,如下所示:
python groupby()函数举例,Python编程实战与案例,pandas,python,数据分析,groupby,apply

18. dropna

缺省情况下,groupby函数忽略缺失值。如果用于分组的列中缺少一个值,那么它将不包含在任何组中,也不会单独显示。所以可以使用dropna参数来改变这个行为。

首先添加一个缺少存储值的新行:
python groupby()函数举例,Python编程实战与案例,pandas,python,数据分析,groupby,apply
然后计算带有dropna参数和不带有dropna参数的每个company的平均age,以查看差异。
python groupby()函数举例,Python编程实战与案例,pandas,python,数据分析,groupby,apply

19. 求组的个数

有时需要知道生成了多少组,这可以使用ngroups
python groupby()函数举例,Python编程实战与案例,pandas,python,数据分析,groupby,apply

20. 获得一个特定分组

get_group函数可获取特定组并且返回DataFrame。
python groupby()函数举例,Python编程实战与案例,pandas,python,数据分析,groupby,apply

21. rank函数

rank函数用于根据给定列中的值为行分配秩。可以使用rank和groupby函数分别对每个组中的行进行排序。
python groupby()函数举例,Python编程实战与案例,pandas,python,数据分析,groupby,apply

22. 累计操作

可以计算出每组的累计总和:
先创建一个示例dataframe:
python groupby()函数举例,Python编程实战与案例,pandas,python,数据分析,groupby,apply
然后单独创建一个列,包含值列的累计总和,如下所示:
python groupby()函数举例,Python编程实战与案例,pandas,python,数据分析,groupby,apply

23. expanding函数

expanding函数提供展开转换。但是对于展开以后的操作还是需要一个累计函数来对其操作。例如它与cumsum 函数一起使用,结果将与与sum函数相同。
python groupby()函数举例,Python编程实战与案例,pandas,python,数据分析,groupby,apply

24. 累积平均

利用展开函数和均值函数计算累积平均:
python groupby()函数举例,Python编程实战与案例,pandas,python,数据分析,groupby,apply

25. 展开后的最大值

可以使用expand和max函数记录组当前最大值:
python groupby()函数举例,Python编程实战与案例,pandas,python,数据分析,groupby,apply
在Pandas中groupby函数与aggregate函数共同构成了高效的数据分析工具。文章来源地址https://www.toymoban.com/news/detail-776836.html

参考资料

  1. 超好用的Groupby用法详解
  2. 25个例子学会Pandas Groupby 操作
  3. 数据处理三板斧——map、apply、applymap详解

到了这里,关于【Python】Pandas Groupby操作的25个示例的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python中groupby函数详解(非常容易懂)

    groupby函数主要的作用是进行数据的分组以及分组后地组内运算! 于数据的分组和分组运算主要是指groupby函数的应用,具体函数的规则如下: 举例如下: 上面语句的功能是输出表格所有数据中不同地区不同类型的评分数据平均值。 结果为: 首先,我们有一个变量data,数据

    2024年01月16日
    浏览(51)
  • pandas笔记:groupby整理

    按照Type 聚类,聚类后将同组的Kg属性合并,求均值 聚合的内容可以是 max, min, mean, unique(唯一值), nunique(唯一值数量),lambda 表达式       按照Type 聚类,聚类后将同组的Kg、Depth属性合并,求均值   重命名的名字=(需要操作的列名,需要的操作名)       参考内容:

    2024年02月16日
    浏览(41)
  • Pandas怎样实现groupby分组统计

    一、如何实现分组统计 导入数据 二、分组使用聚合函数做数据统计 1、单个列groupby,查询所有数据列的统计 我们看到: 2、多个列groupby,查询所有数据列的统计 我们看到:(‘A’,‘B’)成对变成了二级索引 3、同时查看多种数据统计 4、查看单列的结果数据统计 5、不同列使

    2024年02月09日
    浏览(37)
  • 分组聚合不再难:Pandas groupby使用指南

    处理大量数据时,经常需要对数据进行分组和汇总, groupby 为我们提供了一种简洁、高效的方式来实现这些操作,从而简化了数据分析的流程。 分组 是指根据一个或多个列的值将数据分成多个组,每个组包含具有相同键值(这里的键值即用来分组的列值)的数据行。 聚合

    2024年03月09日
    浏览(44)
  • pandas数据分析——groupby得到分组后的数据

    Pandas怎样实现groupby聚合后字符串列的合并(四十) pandas—groupby如何得到分组里的数据 在处理时间序列的数据中,有时候会遇到有些日期的数据缺失的情况,这时候可以用pandas的 date_range 函数快速补齐缺失日期,再根据实际情况补齐缺失值。 常用参数为: start :指定生成时

    2024年02月11日
    浏览(37)
  • 【flink番外篇】9、Flink Table API 支持的操作示例(6)- 表的聚合(group by、Distinct、GroupBy/Over Window Aggregation)操作

    一、Flink 专栏 Flink 专栏系统介绍某一知识点,并辅以具体的示例进行说明。 1、Flink 部署系列 本部分介绍Flink的部署、配置相关基础内容。 2、Flink基础系列 本部分介绍Flink 的基础部分,比如术语、架构、编程模型、编程指南、基本的datastream api用法、四大基石等内容。 3、

    2024年02月02日
    浏览(36)
  • 25+ Python 数据操作教程(第十一节PYTHON 中的字符串函数及示例)

    常用字符串函数列表 下表显示了许多常见的字符串函数及其说明及其在 MS Excel 中的等效函数。我们在工作场所都使用MS Excel,并且熟悉MS Excel中使用的功能。MS EXCEL和Python中字符串函数的比较可以帮助你快速学习函数并在面试前做好准备。 功能 描述 MS Excel 函数 字符串[:N] 从

    2024年02月13日
    浏览(43)
  • Pandas.DataFrame.groupby() 数据分组(数据透视、分类汇总) 详解 含代码 含测试数据集 随Pandas版本持续更新

    关于Pandas版本: 本文基于 pandas2.2.0 编写。 关于本文内容更新: 随着pandas的stable版本更迭,本文持续更新,不断完善补充。 传送门: Pandas API参考目录 传送门: Pandas 版本更新及新特性 传送门: Pandas 由浅入深系列教程 DataFrame.groupby() 方法用于使用映射器或指定的列,对 D

    2024年01月16日
    浏览(51)
  • django groupby踩坑

    django的orm作为简单查询 使用简直是太爽了,所见即所得,但是groupby时候缺有一些坑点 搜索了一圈也没找到合适的答案。。。 记录一下 压根没参考 https://zhuanlan.zhihu.com/p/627534022

    2024年02月16日
    浏览(37)
  • Laravel 集合中 groupBy用法

    居然一直忽略了 groupBy() 这么好用的东西 groupBy 方法根据指定键对集合项进行分组: 你可以传递一个回调函数用来代替一个字符串的 键。这个回调函数应该返回你希望用来分组的键的值: 可以传递一个数组用于多重分组标准。每一个数组元素将对应多维数组内的相应级别:

    2024年02月11日
    浏览(69)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包