数据分析利器,25个例子学会Pandas Groupby 操作!

深入理解Pandas的groupby函数 深入理解Pandas groupby 阅读详情

 
点击上方“菜学Python”,选择“星标”公众号

超级无敌干货,第一时间送达!!!116e2459dc8adcf0ad3fc88edbec8249.jpeg

来源丨DeepHub IMBA

大家好,我是菜鸟哥。

groupby是Pandas在数据分析中最常用的函数之一。它用于根据给定列中的不同值对数据点(即行)进行分组,分组后的数据可以计算生成组的聚合值。

如果我们有一个包含汽车品牌和价格信息的数据集,那么可以使用groupby功能来计算每个品牌的平均价格。

ca38a3b5bc484238af53079b5295ecd8.png

在本文中,我们将使用25个示例来详细介绍groupby函数的用法。这25个示例中还包含了一些不太常用但在各种任务中都能派上用场的操作。

这里使用的数据集是随机生成的,我们把它当作一个销售的数据集。


 
import pandas as pd
 sales = pd.read_csv("sales_data.csv")
 sales.head()

1、单列聚合

我们可以计算出每个店铺的平均库存数量如下:


 
sales.groupby("store")["stock_qty"].mean()
 
 #输出
 store
 Daisy     1811.861702
 Rose       1677.680000
 Violet   14622.406061
 Name: stock_qty, dtype: float64

2、多列聚合

在一个操作中进行多个聚合。以下是我们如何计算每个商店的平均库存数量和价格。


 
sales.groupby("store")[["stock_qty","price"]].mean()

3、多列多个聚合

我们还可以使用agg函数来计算多个聚合值。

sales.groupby("store")["stock_qty"].agg(["mean", "max"])

4、对聚合结果进行命名

在前面的两个示例中,聚合列表示什么还不清楚。例如,“mean”并没有告诉我们它是什么的均值。在这种情况下,我们可以对聚合的结果进行命名。


 
sales.groupby("store").agg(  
    avg_stock_qty = ("stock_qty", "mean"),
    max_stock_qty = ("stock_qty", "max")
    )

要聚合的列和函数名需要写在元组中。

5、多个聚合和多个函数

sales.groupby("store")[["stock_qty","price"]].agg(["mean", "max"])

6、对不同列的聚合进行命名


 
sales.groupby("store").agg(
    avg_stock_qty = ("stock_qty", "mean"),
    avg_price = ("price", "mean")
    )

7、as_index参数

如果groupby操作的输出是DataFrame,可以使用as_index参数使它们成为DataFrame中的一列。


 
sales.groupby("store", as_index=False).agg(
     
    avg_stock_qty = ("stock_qty", "mean"),
    avg_price = ("price", "mean")
    )

78a332c7daad45a1122f0b617009e208.png

8、用于分组的多列

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


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

c576c0fe4366d7f059a875c4088a6ac7.png

每个商店和产品的组合都会生成一个组。

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()

这些行根据平均销售值按降序排序。

10、最大的Top N

max函数返回每个组的最大值。如果我们需要n个最大的值,可以用下面的方法:


 
sales.groupby("store")["last_week_sales"].nlargest(2)
 
 store      
 Daisy   413   1883
        231     947
 Rose   948     883
        263     623
 Violet 991   3222
        339   2690
 Name: last_week_sales, dtype: int64

11、最小的Top N

与最大值相似,也可以求最小值


 
sales.groupby("store")["last_week_sales"].nsmallest(2)

12、第n个值

除上面2个以外,还可以找到一组中的第n个值。

sales_sorted = sales.sort_values(by=["store","last_month_sales"], ascending=False, ignore_index=True)

找到每个店铺上个月销售排名第五的产品如下:


 
sales_sorted.groupby("store").nth(4)

输出包含每个组的第5行。由于行是根据上个月的销售值排序的,所以我们将获得上个月销售额排名第五的行。

13、第n个值,倒排序

也可以用负的第n项。例如," nth(-2) "返回从末尾开始的第二行。


 
sales_sorted.groupby("store").nth(-2)

14、唯一值

unique函数可用于查找每组中唯一的值。例如,可以找到每个组中唯一的产品代码如下:


 
sales.groupby("store", as_index=False).agg(
 unique_values = ("product_code","unique")
 )

15、唯一值的数量

还可以使用nunique函数找到每组中唯一值的数量。


 
sales.groupby("store", as_index=False).agg(
 number_of_unique_values = ("product_code","nunique")
 )

16、Lambda表达式

可以在agg函数中使用lambda表达式作为自定义聚合操作。


 
sales.groupby("store").agg(
    total_sales_in_thousands = (
        "last_month_sales",
        lambda x: round(x.sum() / 1000, 1)
    )
 )

59d3caed08747d093e016aa810e91aba.png

17、apply函数

使用apply函数将Lambda表达式应用到每个组。例如,我们可以计算每家店上周销售额与上个月四分之一销售额的差值的平均值,如下:


 
sales.groupby("store").apply(
 lambda x: (x.last_week_sales - x.last_month_sales / 4).mean()
 )
 
 store
 Daisy     5.094149
 Rose     5.326250
 Violet   8.965152
 dtype: float64

18、dropna

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

让我们首先添加一个缺少存储值的新行。


 
sales.loc[1000] = [None, "PG2", 10000, 120, 64, 96, 15, 53]

然后计算带有dropna参数和不带有dropna参数的每个商店的平均价格,以查看差异。


 
sales.groupby("store")["price"].mean()
 
 store
 Daisy     69.327426
 Rose     60.513700
 Violet   67.808727
 Name: price, dtype: float64

看看设置了缺失值参数的结果:


 
sales.groupby("store", dropna=False)["price"].mean()
 
 store
 Daisy     69.327426
 Rose     60.513700
 Violet   67.808727
 NaN       96.000000
 Name: price, dtype: float64

groupby函数的dropna参数,使用pandas版本1.1.0或更高版本。

19、求组的个数

有时需要知道生成了多少组,这可以使用ngroups。


 
sales.groupby(["store", "product_group"]).ngroups
 
 18

在商店和产品组列中有18种不同值的不同组合。

20、获得一个特定分组

get_group函数可获取特定组并且返回DataFrame。

例如,我们可以获得属于存储“Daisy”和产品组“PG1”的行如下:


 
aisy_pg1 = sales.groupby(
 ["store", "product_group"]).get_group(("Daisy","PG1")
 )
 daisy_pg1.head()

21、rank函数

rank函数用于根据给定列中的值为行分配秩。我们可以使用rank和groupby函数分别对每个组中的行进行排序。


 
sales["rank"] = sales.groupby("store"["price"].rank(
 ascending=False, method="dense"
 )
 
 sales.head()

22、累计操作

们可以计算出每组的累计总和。


 
import numpy as npdf = pd.DataFrame(
    {
      "date": pd.date_range(start="2022-08-01", periods=8, freq="D"),
      "category": list("AAAABBBB"),
      "value": np.random.randint(10, 30, size=8)
    }
 )

我们可以单独创建一个列,包含值列的累计总和,如下所示:


 
df["cum_sum"] = df.groupby("category")["value"].cumsum()

23、expanding函数

expanding函数提供展开转换。但是对于展开以后的操作还是需要一个累计函数来堆区操作。例如它与cumsum 函数一起使用,结果将与与sum函数相同。


 
df["cum_sum_2"] = df.groupby(
    "category"
 )["value"].expanding().sum().values

ab3575b12e6225b5756abc7fbab47e27.png

24、累积平均

利用展开函数和均值函数计算累积平均。


 
df["cum_mean"] = df.groupby(
    "category"
 )["value"].expanding().mean().values

123afd6c74df63a228c5b3e7a0b94417.png

25、展开后的最大值

可以使用expand和max函数记录组当前最大值。


 
df["current_highest"] = df.groupby(
    "category"
 )["value"].expanding().max().values

在Pandas中groupby函数与aggregate函数共同构成了高效的数据分析工具。在本文中所做的示例涵盖了groupby功能的大多数用例,希望对你有所帮助。


 

 

 

 

 

 

 

 

 
推荐阅读:
入门: 最全的零基础学Python的问题  | 零基础学了8个月的Python  | 实战项目 |学Python就是这条捷径
干货:爬取豆瓣短评,电影《后来的我们》 | 38年NBA最佳球员分析 |   从万众期待到口碑扑街!唐探3令人失望  | 笑看新倚天屠龙记 | 灯谜答题王 |用Python做个海量小姐姐素描图 |碟中谍这么火,我用机器学习做个迷你推荐系统电影
趣味:弹球游戏  | 九宫格  | 漂亮的花 | 两百行Python《天天酷跑》游戏!
AI: 会做诗的机器人 | 给图片上色 | 预测收入 | 碟中谍这么火,我用机器学习做个迷你推荐系统电影
小工具: Pdf转Word,轻松搞定表格和水印! | 一键把html网页保存为pdf!|  再见PDF提取收费! | 用90行代码打造最强PDF转换器,word、PPT、excel、markdown、html一键转换 | 制作一款钉钉低价机票提示器! |60行代码做了一个语音壁纸切换器天天看小姐姐!|

年度爆款文案

点阅读原文,看B站50个Python实战视频!

Pandas对数据进行排序标记(rank函数) Pandas对数据进行排序标记(rank函数) 现有一个问题: 数据是多个重复两遍的user_id,想新建一列,给重复的user_id标号,1和2。 具体功能如图: 使用groupby和rank函数即可实现上述功能。 具体代码如下: # 注: 这里是用user_id列对数据进行分组,然后对id列进行排序并且标号 df['rank_id'] = df.groupby('user_id').id.rank(ascending=1,method='first') rank的参数为: ascending: 排序 阅读详情

相关推荐

Pandas教程 | 超好用的Pandas Groupby详解

公众号:Python读财 如有问题或建议,请公众号留言 在日常的数据分析中,经常需要将数据**根据某个(多个)字段划分为不同的群体(group)**进行分析,如电商领域将全国的总销售额根据省份进行划分,分析各省销售额的变化情况,社交领域将用户根据画像(性别、年龄)进行细分,研究用户的使用情况和偏好等。在Pandas中,上述的数据处理操作主要运用groupby完成,这篇文章就介绍一下groupb...

Python读财 4181

Pandas中 的 rank() 函数 和 groupby 的 rank() 函数用法

一、pandas中的rank()函数 首先随机初始化一组数,然后 data = pd.Series([1,2,3,4,5]) print(data) data = data.rank() print(data) 这里的rank()函数打印出来虽然和原数组没区别,但是这里rank表示的是次序,所以这里的1.0,2.0表示的是第一名和第二名 如果有重复值的话 data = pd.Series([1,1,2,2,3,3,4,4,5]) print(data) data = data.rank()

Matrix_cc的博客 1万+

PIA Pandas 数据分析实战 9 GroupBy 对象

pandas 库的 GroupBy 对象是一个存储容器,用于将 DataFrame 行分组到存储桶中。它提供了一组方法来聚合和分析集合中的每个独立组。它允许我们提取每个组中特定索引位置的行。它还提供了一种迭代行组的便捷方法。

Py4Fi的博客 1231

pandas.groupby().rank()用法详解

pandas.DataFrame.groupby() Group DataFrame using a mapper or by a Series of columns. A groupby operation involves some combination of splitting the object, applying a function, and combining the results. This can be used to group large amounts of data ..

漫步量化 3271

25个例子学会Pandas Groupby 操作

它用于根据给定列中的不同值对数据点(即行)进行分组,分组后的数据可以计算生成组的聚合值。在本文中,我们将使用25个示例来详细介绍groupby函数的用法。如果groupby操作的输出是DataFrame,可以使用as_index参数使它们成为DataFrame中的一列。如果我们有一个包含汽车品牌和价格信息的数据集,那么可以使用groupby功能来计算每个品牌的平均价格。由于行是根据上个月的销售值排序的,所以我们将获得上个月销售额排名第五的行。这里使用的数据集是随机生成的,我们把它当作一个销售的数据集。

白话机器学习 1307

保姆级教程:在Ubuntu 20.04上从源码编译Apollo自动驾驶平台(含GPU环境配置)

本文提供了一份详细的Ubuntu 20.04上从源码编译Apollo自动驾驶平台的保姆级教程,包括GPU环境配置、Docker部署和编译构建等关键步骤。通过实战经验和避坑指南,帮助开发者高效完成Apollo平台的编译和验证,适用于自动驾驶技术研究和应用开发。

weixin_30876945的博客 409

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

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

小哲的博客 1万+

用宝塔面板+CentOS 7.6,30分钟搞定DNF手游私服搭建(附全套资源下载)

本文详细介绍了如何使用宝塔面板和CentOS 7.6在30分钟内快速搭建DNF手游私服。通过图形化界面操作,无需复杂命令,即可完成服务端部署、MySQL数据库配置及客户端适配,适合Linux新手快速上手。

weixin_33737774的博客 601

pandas group by + rank 求在分组内的百分位、最接近某百分位的行

分组后,使用 rank。

Michael是个半路程序员 1605

RK3568/RK3588之修改8250驱动实现RS485收发的自动切换

在串口发送前,若为485,则将控制引脚拉为发送状态,在发送后,循环查看是否发送完成,若发送完成则将引脚置回读状态,如此一来,就能实现在内核测控制方向切换,而不会因为延时造成数据丢失,经过测试此办法可行。全部修改完成后,重新编译生成内核文件和设备树文件,烧写到板子上即可。

哒宰的博客 3116

Windows10下部署Heygem进行数字人生成

对于使用Heygem生成数字人,需要注意几个问题: + 需要使用Nvidia的显卡。 + 需要在Windows上进行本地部署。主要原因为客户端是Windows的,客户端对上传的视频写入硬编码的`D:\heygem_data\voice\data`目录,需要在容器上读取这些文件。 + 需要在Windows上部署Docker,将Windows的目录映射到容器中,由容器中的服务进行读取。 + 需要特别注意,一定要有D盘,这个D盘是Windows的D盘,不能是插入的USB设备后产生的D盘。 + 需要下载3个Doc

冀辉的博客 5619

25个例子学会Pandas Groupby 操作!

groupby是Pandas在数据分析中最常用的函数之一。它用于根据给定列中的不同值对数据点(即行)进行分组,分组后的数据可以计算生成组的聚合值。如果我们有一个包含汽车品牌和价格信息的数据集,那么可以使用groupby功能来计算每个品牌的平均价格。在本文中,我们将使用25个示例来详细介绍groupby函数的用法。这25个示例中还包含了一些不太常用但在各种任务中都能派上用场的操作。这里使用的数据集是随机生成的,我们把它当作一个销售的数据集。我们可以计算出每个店铺的平均库存数量如下:​​​​​​​。

2401_86168842的博客 990

Qt C++:跨平台开发利器

摘要: Qt C++是基于C++的跨平台开发框架,通过元对象系统、信号槽机制及模块化架构实现"一次编写,多端部署"。核心特性包括: 跨平台能力:覆盖桌面(Windows/macOS/Linux)、移动端(iOS/Android)、嵌入式及WebAssembly; 信号与槽:替代传统回调,实现对象间高效通信; UI组件库:200+预制组件支持QSS样式定制; 工具链:Qt Creator集成开发环境提供可视化设计、调试及多平台编译。 广泛应用于工业控制、车载系统、医疗设备及跨平台应用开发,

2202_75382767的博客 1682

Pandas中groupby的这些用法

文章来源:小数志 作者:luanhz 01 如何理解pandas中的groupby操作 groupby是pandas中用于数据分析的一个重要功能,其功能与SQL中的分组操作类似,但功能却更为强大。理解groupby的原理可参考官网给出的解释: 其中: split:按照某一原则(groupby字段)进行拆分,相同属性分为一组 apply:对拆分后的各组执行相应的转换操作 combine:输出汇总转换后的各组结果 02 分组(split...

Ch3nnn的博客 6万+

YOLO26涨点改进 | 全网独家复现、小目标检测改进篇 | TGRS 2025 | YOLO26引入MFAE-YOLO中的GFFP、FCPS 和 C3k2-FPEU创新点,涨点起飞,直接发论文

🔥本文给大家介绍在YOLO26中引入MFAE-YOLO中的 GFFP(全局特征融合处理)、FCPS(特征通道像素注意力) 和 C3k2-FPEU(特征池提取单元) 二次创新改进模块,能显著提升对小目标的检测性能。GFFP通过多尺度特征融合增强全局上下文感知能力,有效提升小目标在复杂背景下的可辨性;FCPS融合通道、像素和空间注意力机制,增强了模型对关键细节和小区域特征的关注,提升检测精度;C2F-FPEU利用多种池化方式挖掘细节特征,优化浅层特征表示能力。三者协同提升了YOLO26在小目标检测中的鲁棒性。

Ai缝合怪、助力小伙伴高效发论文 306

【大语言模型 14】Transformer权重初始化策略:从Xavier到GPT的参数初始化演进之路

权重初始化是深度学习训练成功的隐秘基石,特别是在Transformer这样的深层架构中,合适的初始化策略能够决定模型的训练稳定性和收敛速度。本文从经典的Xavier和He初始化出发,深入解析Transformer特有的初始化策略,通过数学推导、代码实现和实验分析,揭示不同初始化方法对大语言模型训练的深层影响。我们将探讨为什么GPT系列模型采用特定的初始化方案,以及如何针对不同层设计最优的初始化策略。

熵数实验室 1686

pandas之分组groupby()的使用整理与总结

前言 在使用pandas的时候,有些场景需要对数据内部进行分组处理,如一组全校学生成绩的数据,我们想通过班级进行分组,或者再对班级分组后的性别进行分组来进行分析,这时通过pandas下的groupby()函数就可以解决。在使用pandas进行数据分析时,groupby()函数将会是一个数据分析辅助的利器。 groupby的作用可以参考 超好用的 pandas 之 groupby 中作者的插图进行直...

敲代码的quant的博客 16万+

C2000ware介绍

C2000的下载安装指南C2000目录。

小柚子的博客 2796

pandas groupby 用法详解

1.分组groupby 在日常数据分析过程中,经常有分组的需求。具体来说,就是根据一个或者多个字段,将数据划分为不同的组,然后进行进一步分析,比如求分组的数量,分组内的最大值最小值平均值等。在sql中,就是大名鼎鼎的groupby操作。 pandas中,也有对应的groupby操作,下面我们就来看看pandas中的groupby怎么使用。 2.groupby的数据结构 首先我们看如下代码 def ddd(): levels = ["L1", "L1", "L1", "L2", "L2", "L3",

bitcarmanlee的博客 3万+

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

怀旧版电脑GBC模拟器

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

25 个例子学会Pandas Groupby 操作!

来源丨DeepHub IMBAgroupby是Pandas在数据分析中最常用的函数之一。它用于根据给定列中的不同值对数据点(即行)进行分组,分组后的数据可以计算生成组的聚合值。如果我们有一个包含汽车品牌和价格信息的数据集,那么可以使用groupby功能来计算每个品牌的平均价格。在本文中,我们将使用25个示例来详细介绍groupby函数的用法。这25个示例中还包含了一些不太常用但在各种任务中都能派上...

lsxxx2011的专栏 204

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

pandas——groupby操作

在数据分析中,我们往往需要在将数据拆分,在每一个特定的组里进行运算。as_index:在groupby中使用的键是否成为新的dataframe中的索引,默认as_index=True。sort:对groupby分组后新的dataframe中索引进行排序,sort=True为升序,我们通过一个或者多个分类变量将数据拆分,然后分别在拆分以后的数据上进行需要的计算。squeeze :如果可能的话,减少返回类型的维数,否则返回一个一致的类型。pandas中的groupby提供了一个高效的数据的分组运算。

阿极的博客 1万+

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

25个例子学会Pandas Groupby 操作(附代码)

来源:DeepHub IMBA 本文约2300字,建议阅读5分钟本文用25个示例详细介绍groupby的函数用法。groupby是Pandas在数据分析中最常用的函数之一。它用于根据给定列中的不同值对数据点(即行)进行分组,分组后的数据可以计算生成组的聚合值。如果我们有一个包含汽车品牌和价格信息的数据集,那么可以使用groupby功能来计算每个品牌的平均价格。在本文中,我们将使用25个示例来详细介...

数据派THU 620
上一篇: 此文24小时内,我必删!!(价值超大)
下一篇: PyTorch自然语言处理入门与实战 | 文末赠书
菜鸟学Python
博客等级 码龄9年 8063粉丝 571原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值