0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

数据处理中pandas的groupby小技巧

数据分析与开发 来源:Python数据科学 作者:东哥起飞 2021-04-09 11:34 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

pandas的groupby是数据处理中一个非常强大的功能。虽然很多同学已已经非常熟悉了,但有些小技巧还是要和大家普及一下的。为了给大家演示,我们采用一个公开的数据集进行说明。

import pandas as pd

iris = pd.read_csv

随机采样5条,数据是长这样子的。

》》》 iris.sample(5)

sepal_length sepal_width petal_length petal_width species

95 5.7 3.0 4.2 1.2 versicolor

71 6.1 2.8 4.0 1.3 versicolor

133 6.3 2.8 5.1 1.5 virginica

4 5.0 3.6 1.4 0.2 setosa

33 5.5 4.2 1.4 0.2 setosa

因为是分组功能,所以被分的对象肯定是类别型的。在这个数据里,这里我们就以species进行分组举例。

首先,以species分组创建一个groupby的object。这里单独生成groupby对象是因为后面会反复用到,其实用的熟练了直接链接起来就可以了。

iris_gb = iris.groupby(‘species’)

一、创建频率表假如我想知道每个species类中的数量有多少,那么直接使用groupby的size函数即可,如下。

》》》 iris_gb.size()

species

setosa 50

versicolor 50

virginica 50

dtype: int64

二、计算常用的描述统计量比如,我想要按组计算均值,那么就用mean()函数。

》》》 # 计算均值

》》》 iris_gb.mean()

sepal_length sepal_width petal_length petal_width

species

setosa 5.006 3.428 1.462 0.246

versicolor 5.936 2.770 4.260 1.326

virginica 6.588 2.974 5.552 2.026

默认情况下如果没有限制,那么mean()函数将对所有变量特征计算均值。如果我希望只计算某一个变量的均值,可以指定该变量,如下所示。

》》》 # 单列

》》》 iris_gb[‘sepal_length’].mean()

species

setosa 5.006

versicolor 5.936

virginica 6.588

Name: sepal_length, dtype: float64

》》》 # 双列

》》》 iris_gb[[‘sepal_length’, ‘petal_length’]].mean()

sepal_length petal_length

species

setosa 5.006 1.462

versicolor 5.936 4.260

virginica 6.588 5.552

同理,其它描述性统计量min、max()、medianhe和std都是一样的用法。

三、查找最大值(最小值)索引如果我们要查找每个组的最大值或最小值的索引时,有一个方便的功能可以直接使用。

》》》 iris_gb.idxmax()

sepal_length sepal_width petal_length petal_width

species

setosa 14 15 24 43

versicolor 50 85 83 70

virginica 131 117 118 100

如何应用呢?

比如我们想查找每组sepal_length最大值对应的整条记录时,就可以这样用。注意,这里是整条记录,相当于按sepal_length最大值这个条件进行了筛选。

》》》 sepal_largest = iris.loc[iris_gb[‘sepal_length’].idxmax()]

》》》 sepal_largest

sepal_length sepal_width petal_length petal_width species

14 5.8 4.0 1.2 0.2 setosa

50 7.0 3.2 4.7 1.4 versicolor

131 7.9 3.8 6.4 2.0 virginica

四、Groupby之后重置索引很多时候,我们在groupby处理后还要进行其他操作。也就是说,我们想重置分组索引以使其成为正常的行和列。

第一种方法可能大家常用,就是通过reset_index()让乱序索引重置。

》》》 iris_gb.max().reset_index()

species sepal_length sepal_width petal_length petal_width

0 setosa 5.8 4.4 1.9 0.6

1 versicolor 7.0 3.4 5.1 1.8

2 virginica 7.9 3.8 6.9 2.5

但其实,还有一个看上去更加友好的用法。可以在groupby的时候就设置as_index参数,也可以达到同样效果。

》》》 iris.groupby(‘species’, as_index=False).max()

species sepal_length sepal_width petal_length petal_width

0 setosa 5.8 4.4 1.9 0.6

1 versicolor 7.0 3.4 5.1 1.8

2 virginica 7.9 3.8 6.9 2.5

五、多种统计量汇总上面都是单个统计量的操作,那如果我想同时操作好几个呢?

groupby还有一个超级棒的用法就是和聚合函数agg连起来使用。

》》》 iris_gb[[‘sepal_length’, ‘petal_length’]].agg([“min”, “mean”])

sepal_length petal_length

min mean min mean

species

setosa 4.3 5.006 1.0 1.462

versicolor 4.9 5.936 3.0 4.260

virginica 4.9 6.588 4.5 5.552

在agg里面,我们只要列出统计量的名称即可,便可同时对每个列进行多维度统计。

六、特定列的聚合我们也看到了,上面是的多个操作对于每个列都是一样的。实际使用过程中,我们可能对于每个列的需求都是不一样的。

所以在这种情况下,我们可以通过为不同的列单独设置不同的统计量。

》》》 iris_gb.agg({“sepal_length”: [“min”, “max”], “petal_length”: [“mean”, “std”]})

sepal_length petal_length

min max mean std

species

setosa 4.3 5.8 1.462 0.173664

versicolor 4.9 7.0 4.260 0.469911

virginica 4.9 7.9 5.552 0.551895

7、NamedAgg命名统计量现在我又有新的想法了。上面的多级索引看起来有点不太友好,我想把每个列下面的统计量和列名分别合并起来。可以使用NamedAgg来完成列的命名。

》》》 iris_gb.agg(

。。. sepal_min=pd.NamedAgg(column=“sepal_length”, aggfunc=“min”),

。。. sepal_max=pd.NamedAgg(column=“sepal_length”, aggfunc=“max”),

。。. petal_mean=pd.NamedAgg(column=“petal_length”, aggfunc=“mean”),

。。. petal_std=pd.NamedAgg(column=“petal_length”, aggfunc=“std”)

。。. )

sepal_min sepal_max petal_mean petal_std

species

setosa 4.3 5.8 1.462 0.173664

versicolor 4.9 7.0 4.260 0.469911

virginica 4.9 7.9 5.552 0.551895

因为NamedAgg是一个元组,所以我们也可以直接赋值元组给新的命名,效果一样,但看上去更简洁。

iris_gb.agg(

sepal_min=(“sepal_length”, “min”),

sepal_max=(“sepal_length”, “max”),

petal_mean=(“petal_length”, “mean”),

petal_std=(“petal_length”, “std”)

八、使用自定义函数上面agg聚合函数中我们都是通过添加一个统计量名称来完成操作的,除此之外我们也可直接给一个功能对象。

》》》 iris_gb.agg(pd.Series.mean)

sepal_length sepal_width petal_length petal_width

species

setosa 5.006 3.428 1.462 0.246

versicolor 5.936 2.770 4.260 1.326

virginica 6.588 2.974 5.552 2.026

不仅如此,名称和功能对象也可一起使用。

iris_gb.agg([“min”, pd.Series.mean])

更骚的是,我们还可以自定义函数,也都是可以的。

》》》 def double_length(x):

。。. return 2*x.mean()

。。.

》》》 iris_gb.agg(double_length)

sepal_length sepal_width petal_length petal_width

species

setosa 10.012 6.856 2.924 0.492

versicolor 11.872 5.540 8.520 2.652

virginica 13.176 5.948 11.104 4.052

当然如果想更简洁,也可以使用lambda函数。总之,用法非常灵活,可以自由组合搭配。

iris_gb.agg(lambda x: x.mean())

以上就是使用groupby过程中可能会用到的8个操作,如果你熟练使用起来会发现这个功能是真的很强大。

原文标题:Pandas 100 个骚操作:groupby 8 个常用技巧!

文章出处:【微信公众号:数据分析与开发】欢迎添加关注!文章转载请注明出处。

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 函数
    +关注

    关注

    3

    文章

    4422

    浏览量

    67855
  • 数据处理
    +关注

    关注

    0

    文章

    654

    浏览量

    30080

原文标题:Pandas 100 个骚操作:groupby 8 个常用技巧!

文章出处:【微信号:DBDevs,微信公众号:数据分析与开发】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    云端数据处理专利技术:重塑数字时代的算力基石

    一、云端数据处理:数字经济的核心引擎在数字化浪潮席卷全球的今天,每天产生的数据量呈指数级增长。从智能终端的实时传感数据,到企业的业务运营数据,再到科研领域的海量实验
    的头像 发表于 04-07 11:20 1486次阅读
    云端<b class='flag-5'>数据处理</b>专利技术:重塑数字时代的算力基石

    自动驾驶如何确保数据处理的实时性?

    [首发于智驾最前沿微信公众号]在自动驾驶系统里,数据处理的实时性并不是一个抽象的技术指标,而是直接决定车辆“来不来得及反应”的关键能力。道路环境变化极快,前车急刹、行人突然横穿、旁车并线等情况
    的头像 发表于 02-21 09:48 5351次阅读
    自动驾驶如何确保<b class='flag-5'>数据处理</b>的实时性?

    DPU数据处理器的核心功能和应用领域

    DPU,全称数据处理器(Data Processing Unit),是一种专门用于处理数据中心中数据流动与基础设施任务的专用处理器。它既不像
    的头像 发表于 02-02 13:52 891次阅读
    DPU<b class='flag-5'>数据处理</b>器的核心功能和应用领域

    SN74CB3Q3257:助力高速数据处理的理想之选

    SN74CB3Q3257:助力高速数据处理的理想之选 在当今快速发展的电子科技领域,高速数据处理和传输需求日益增长,对电子元件的性能和可靠性也提出了更高的要求。SN74CB3Q3257这款 4 位
    的头像 发表于 01-15 16:50 359次阅读

    探索DS08MB200:高速数据处理的理想之选

    探索DS08MB200:高速数据处理的理想之选 在高速数据处理领域,工程师们总是在寻找性能卓越、功能强大且稳定可靠的器件。今天,我们就来深入了解一款由德州仪器(TI)推出的DS08MB200双端口
    的头像 发表于 12-27 14:20 781次阅读

    海光3350便携机主板:大数据处理利器

    随着企业数字化转型加速,大数据处理需求从固定机房向移动场景延伸。无论是金融机构外出调研、科研团队野外数据采集,还是个人创作者处理海量素材,便携设备的性能成为关键。海光便携机主板凭借独特的技术优势,正成为大
    的头像 发表于 12-26 11:15 713次阅读

    SmartBug2.0 用户指南:硬件连接、功能使用与数据处理全解析

    SmartBug2.0 用户指南:硬件连接、功能使用与数据处理全解析 在电子设备的开发与应用,传感器模块的功能和使用方式至关重要。SmartBug2.0 作为一款功能强大的模块,为我们在多领域
    的头像 发表于 12-26 09:15 540次阅读

    赋能变电站智能运维:EN-HJCL100 环境数据处理单元的核心价值

    在变电站智能化升级的浪潮,环境数据处理单元作为数据采集与联动控制的关键枢纽,正成为保障电力系统稳定运行的核心设备。EN-HJCL100 环境数据处理单元凭借全面的功能配置与可靠的运行
    的头像 发表于 12-04 09:25 383次阅读

    MCU数据采集模块的数据处理和分析能力如何?

    MCU数据采集模块的数据处理和分析能力如何?在现代化结构物安全监测领域,MCU数据采集模块扮演着至关重要的角色。它不仅仅是数据的“搬运工”,更是具备初步
    的头像 发表于 12-02 16:03 555次阅读
    MCU<b class='flag-5'>数据</b>采集模块的<b class='flag-5'>数据处理</b>和分析能力如何?

    内存与数据处理优化艺术

    事务数量,更好地利用CPU缓存。测试表明,在处理大量数据(如20MB)时,这种优化可能带来数倍的性能提升。
    发表于 11-14 07:46

    华大九天Empyrean GoldMask平台重构掩模版数据处理方案

    对芯片产业链上的光罩厂、设计公司而言,掩模版数据处理环节的效率与精度,直接决定着产品能否如期上市、良率能否达标、成本能否可控。当芯片工艺向更先进节点跨越,掩模版数据处理已成为制约生产效率与良率提升
    的头像 发表于 08-26 15:03 2791次阅读
    华大九天Empyrean GoldMask平台重构掩模版<b class='flag-5'>数据处理</b>方案

    如何利用 AI 算法优化碳化硅衬底 TTV 厚度测量数据处理

    碳化硅半导体制造,晶圆总厚度变化(TTV)是衡量衬底质量的关键指标。TTV 厚度测量数据处理的准确性直接影响工艺优化与产品良率。然而,测量数据常受环境噪声、设备误
    的头像 发表于 08-25 14:06 766次阅读
    如何利用 AI 算法优化碳化硅衬底 TTV 厚度测量<b class='flag-5'>数据处理</b>

    二进制数据处理方法分享

    随着不断增长的测试需求、更加复杂的系统集成和更多的数据处理,程序控制在示波器的应用中越来越多。在程序控制很重要的一部分就是如何把数据从示波器传输到我们的上位机上,并且当
    的头像 发表于 07-30 15:41 2598次阅读
    二进制<b class='flag-5'>数据处理</b>方法分享

    电商API的实时数据处理

      在现代电商平台中,API(应用程序接口)扮演着核心角色,它连接用户、商家和后台系统,实现数据的高效交换。随着电商业务规模的扩大,实时数据处理变得至关重要——它要求系统在毫秒级内响应API请求
    的头像 发表于 07-23 15:39 701次阅读
    电商API的实时<b class='flag-5'>数据处理</b>

    抖音电商 API 接口和传统电商接口,直播数据处理谁更快?

    开发者理解谁在直播数据处理更胜一筹。 1. 直播数据处理的核心挑战 直播电商涉及实时数据流,如用户互动、订单生成和库存更新。处理速度取决于
    的头像 发表于 07-09 15:39 849次阅读
    抖音电商 API 接口和传统电商接口,直播<b class='flag-5'>数据处理</b>谁更快?