Pandas的groupby用法说明

news2024/11/16 6:03:15

Pandas的groupby用法说明

1、功能说明

按官方文档说明groupby功能,可以参考与SQL中的分组操作进行理解。
By “group by” we are referring to a process involving one or more of the following steps:

  • Splitting the data into groups based on some criteria.
  • Applying a function to each group independently.
  • Combining the results into a data structure.
    主要三步:
  • 按条件数据分组
  • 每个独立分组数据应用函数处理
  • 结果合并到数据结构中
    数据处理、使用:
    Aggregation: 聚合,sum mean std max min var 等
    Transformation:转换,可以标准化数据,处理空值
    Filtration:过滤,基于分组函数过滤数据,如sum mean
    下面先介绍分组,然后是聚合,转换和过滤

2、数据分组

(1)数据准备

df = pd.DataFrame(
    {
        "product": ['computer','printer','pad','computer','printer','pad','computer','printer'],
        "month": ['1月','2月','3月','4月','1月','2月','3月','4月'],
        "score1": np.random.randint(60,100,8),
        "score2": np.random.randint(60,100,8),
        "score3": np.random.randint(60,100,8)
    })
df

在这里插入图片描述

(2)分组

groupby首先要指定分组原则,groupby函数的第一步,其常用参数包括:

by,分组字段,可以是列名/series/字典/函数,常用为列名

  • axis,指定切分方向,默认为0,表示沿着行切分
  • as_index,是否将分组列名作为输出的索引,默认为True;当设置为False时相当于加了reset_index功能
  • sort,与SQL中groupby操作会默认执行排序一致,该groupby也可通过sort参数指定是否对输出结果按索引排序

按 product 分组:

df.groupby('product',as_index=False)   

注意 df.groupby(‘product’,as_index=False) 是一个分组对象,并非一个dataframe ,开始的时候有些不易理解。

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

<pandas.core.groupby.generic.DataFrameGroupBy object at 0x7f6a16ccdfd0>

看一下分组对象内容
name group都可以随意命名,name对应分组列。

for name, group in df.groupby('product'):
    print(name)
    print(group)
  

运行结果,对理解分组对象就比较容易了:

computer
    product month  score1  score2  score3
0  computer    1月      66      66      90
3  computer    4月      89      91      84
6  computer    3月      88      88      63
pad
  product month  score1  score2  score3
2     pad    3月      72      63      82
5     pad    2月      69      79      60
printer
   product month  score1  score2  score3
1  printer    2月      69      62      75
4  printer    1月      91      87      97
7  printer    4月      73      69      84

(3)组合分组

按 product month 两列分组:

for name, group in df.groupby(['product','month']):
    print(name)
    print(group)

name 就是两个值分组,结果如下:

('computer', '1月')
    product month  score1  score2  score3
0  computer    1月      66      66      90
('computer', '3月')
    product month  score1  score2  score3
6  computer    3月      88      88      63
('computer', '4月')
    product month  score1  score2  score3
3  computer    4月      89      91      84
('pad', '2月')
  product month  score1  score2  score3
5     pad    2月      69      79      60
('pad', '3月')
  product month  score1  score2  score3
2     pad    3月      72      63      82
('printer', '1月')
   product month  score1  score2  score3
4  printer    1月      91      87      97
('printer', '2月')
   product month  score1  score2  score3
1  printer    2月      69      62      75
('printer', '4月')
   product month  score1  score2  score3
7  printer    4月      73      69      84

或者用list函数,显示一下groupby对象内容。

list(df.groupby(['product','month']))   

(4)first tail nth

分组后的第一组分组数据
computer printer pad 第一次出现的数据:

df.groupby('product').first(1)

在这里插入图片描述
tail 和 last 就是最后一组分组数据。
tail包括所有列

df.groupby('product').tail(1)

在这里插入图片描述
last只包括数据列。

df.groupby('product').last(1)

在这里插入图片描述
nth函数就是显示第N组分组数据,可以方便从分组的中间部分查询数据。
显示第3组分组数据,从0开始。本例就是最后一组分组数据,没有pad产品。

df.groupby('product').nth(2)

在这里插入图片描述

df.groupby('product').nth(1)

中间一组分组数据,效果如下:
在这里插入图片描述

3、聚合 Aggregation

(1)单列agg聚合

df.groupby('product')['score1'].agg([np.sum, np.mean, np.std])

score1的求和,均值和标准差,效果如下:
在这里插入图片描述

(2)多列聚合

df.groupby('product').agg({'score1':np.sum, 'score2':np.mean, 'score3':np.std})

效果如下:
在这里插入图片描述
对应SQL 可以类比,更容易理解:

select sum(score1),mean(score2),std(score3) from df group by product ;

(3)多列多聚合计算

df.groupby('product').agg({'score1':[np.sum,np.max], 'score2':[np.mean,np.min], 'score3':[np.std,np.var]})

效果如下:
在这里插入图片描述

(4) apply

apply函数是一个应用非常广泛的转换函数,例如:面向series对象,apply函数的处理粒度是series的每个元素(标量);面向dataframe对象,apply函数的处理粒度是dataframe的一行或一列(series对象);而现在面向groupby后的group对象,其处理粒度则是一个分组(子dataframe对象)
例如:计算两列的均值差

df.groupby('product').apply(lambda x: x['score3'].mean()-x['score1'].mean())

结果如下:

product
computer   -2.000000
pad         0.500000
printer     7.666667
dtype: float64

4、转换 Transformation

每一条数据求得相应的结果,同一组内的样本会有相同
的值,通过索引一一对应。

df.groupby('product')['score1'].transform('mean')

结果如下:

0    81.000000
1    77.666667
2    70.500000
3    81.000000
4    77.666667
5    70.500000
6    81.000000
7    77.666667
Name: score1, dtype: float64

通过transform直接将聚合运算结果增加一个新列 。score1的平均值,增加一个新列。

df['avg_score1'] = df.groupby('product')['score1'].transform('mean')

对应computer产品,都是同一个值,效果如下:
在这里插入图片描述
transform和agg所不一样的地方,对agg而言,会计算得到不同产品对应的均值并直接返回,但对transform而言,则会对每一条数据求得相应的结果,同一组内的样本会有相同的值,组内求完均值后会按照原索引的顺序返回结果

本例的索引就是01234567 。

5、过滤 Filtration

通过聚合函数进行条件筛选,类似SQL中的having 子句。

df.groupby('product').filter(lambda x: x['score1'].mean()>80)

效果如下:
在这里插入图片描述

df.groupby('product').filter(lambda x: x['score3'].mean()<75)

结果如下:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/623640.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VMware® vSphere虚拟化平台限制虚拟机网卡速率一例

本文介绍VMware vSphere对虚拟服务器进行网卡限速的案例 一、案例背景 目前有一套生产环境的虚拟化平台基于VMware vSphere构建。宿主机外连网卡均为主、备各10Gb&#xff0c;核心交换机出口至外部网络带宽也是10Gb。某业务系统使用nginx搭建了两台固件升级服务器对外提供下载…

Spark RDD的创建

文章目录 一、RDD为何物&#xff08;一&#xff09;RDD概念&#xff08;二&#xff09;RDD示例&#xff08;三&#xff09;RDD主要特征 二、做好准备工作&#xff08;一&#xff09;准备文件1、准备本地系统文件2、启动HDFS服务3、上传文件到HDFS &#xff08;二&#xff09;启…

免费升级到 iOS 17 Developer Beta:官方Apple Store升级方案与爱思助手方法比较

&#x1f337;&#x1f341; 博主 libin9iOak带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33…

【unity】几种常用的拖拽方法(内置方法 + 接口 + Event Trigger组件)

前言 在Unity中实现拖拽的方法有多种&#xff0c;以下是几种常见的方法和它们的优缺点 1. 鼠标按键的点击事件 Input.GetMouseButtonDown和Input.GetMouseButtonUp 方法可以监测用户鼠标按键的点击事件&#xff0c;通过检测鼠标按钮的状态来实现拖拽效果。用户通过鼠标进行拖…

DolphinScheduler3.1.4 集群部署

文章目录 DolphinScheduler3.1.4 集群部署一、解压 dolphinScheduler3.1.4 安装包二、复制 mysql8.0.16 的驱动三、创建mysql数据库用户和权限四、配置 dolphinscheduler_env.sh 文件五、初始化元数据六、配置 install_env.sh 文件七、安装 dolphinScheduler DolphinScheduler3…

2核4G服务器阿里云4M和腾讯云5M性能价格对比

阿里云轻量应用服务器2核4G4M带宽297.98元12个月&#xff0c;腾讯云轻量2核4G5M服务器168元一年&#xff0c;628元3年&#xff0c;2核4G轻量应用服务器阿里云和腾讯云怎么选择&#xff1f;哪个性能比较好&#xff1f;阿腾云分享轻量应用服务器2核4G配置阿里云和腾讯云CPU、带宽…

插件分享 | Headshot ⼀击即中,对指定URL进行漏洞批量扫描

前言&#xff1a;在⼀次真实的攻防场景中&#xff0c;我们发现了⼀个存在 Struts2 漏洞的地址&#xff0c;这个地址在我们通过 Fuzz 获得的⼆级⽬录下&#xff0c;这使得 Goby 的爬⾍没有办法爬取到这⼀个⻚⾯&#xff0c;但是我们通过其它 Struts2 专扫⼯具检测发现这个地址确…

入行软件测试一年了,薪资涨到18K,太强了...

梦的开始 收到了领导的通知&#xff0c;说我这一年来表现的很优秀&#xff0c;准备给我加工资。今天收到工资到账短信&#xff0c;扣掉税&#xff0c;比以往多了3k多&#xff0c;再加上年终奖这些&#xff0c;月薪也到了18k&#xff0c;真的太开心了。 仔细想想这一年来&#…

2023软件测试面试热点问题,你真的了解吗?

收集了2023年所有朋友软件测试的面试题后&#xff0c;我特意整理出了7个高频出现的面试题&#xff0c;一起来看看。 高频问题1&#xff1a;请自我介绍下&#xff1f; 高频问题2&#xff1a;请介绍下最近做过的项目&#xff1f; 高频问题3&#xff1a;请介绍下你印象深刻的bug&a…

MSE播放fragmented mp4 问题记录

一、在使用MSE 播放视频的时候发现firfox能播放,chrome 不能播放 原因&#xff1a;两边要求的fragmented mp4的格式要求不一样 , 参照Transcoding assets for Media Source Extensions - Web APIs | MDN 用ffmpeg 转成 对应的格式 firefox ffmpeg -i mp4-264.mp4 -movflags f…

DatenLord开源产品技术分享 | Xline源码解读 No.2

传统单数据中心解决方案无法满足跨数据中心的场景对性能和一致性的需求。DatenLord推出开源分布式KV存储Xline&#xff0c;针对多数据中心场景&#xff0c;可以实现数据的高性能跨云、跨数据中心共享访问&#xff0c;并且保证数据的一致性。 本期源码解读将聚焦Xline的Lease机…

技术赋能-混流编排功能,助力京东618直播重保 | 京东云技术团队

每每到618、双11这样的大型活动的时候&#xff0c;每天都有几个重要的大v或者品牌直播需要保障。 以往的重点场次监播方式是这么造的&#xff1a; 对每路直播的源流、各档转码流分别起一个ffplay播放窗口&#xff0c;再手动调整尺寸在显示器桌面进行布局&#xff0c;排到一屏…

Vue使用prerender-spa-plugin做预渲染,用于SEO优化相关内容

原因:像vue、react、angular开发的都是spa应用,他只有一个页面index,他们都是内加载,动态加载切换路由的,所以你再多页面百度蜘蛛只能爬到首页 1.解决方案 (1)vue.js官网提供的 SSR(服务端渲染) 这种方案呢学习成本高,对于刚开始的新手来说可能有点难度,基本还得重…

WTN6040-8S语音播报芯片在抽油烟机上的应用- 提升厨房智能化体验

在当今快节奏的生活中&#xff0c;智能家居技术的发展不仅为我们的生活带来了便利&#xff0c;更为我们的家庭安全和舒适提供了全新的解决方案。作为现代厨房的关键设备&#xff0c;油烟机在净化空气、排除异味和保护家庭健康方面起着重要的作用。而加入WTN6040-8S语音播报芯片…

如何配置IP地址

一.自动获取IP 1.dhclient 2.ifconfig 通过这个命令可以查看系统有几块网卡和网卡的IP。 如果您的Linux有多块网卡&#xff0c;那么在Linux中它会显示成eth1, eth2 依此类推 二.手动配置IP 如果您的虚拟机不能自动获取IP&#xff0c;那么只能手动配置&#xff0c;配置方法为&am…

项目管理用什么工具?甘特图给你答案

在项目管理中&#xff0c;项目的实施需要制定一个完善的项目计划。然而&#xff0c;在实际的项目管理工作中&#xff0c;计划变化快&#xff0c;总会产生各种问题和突发状况&#xff0c;导致管理问题层出不穷。 例如&#xff0c;项目团队人数多&#xff0c;团队协作混乱&…

SOP电子作业指导书系统SaaS部署及应用分析

随着互联网技术的不断发展&#xff0c;越来越多的企业开始采用SaaS&#xff08;Software as a Service&#xff09;模式来部署和应用各种软件系统。其中&#xff0c;SOP电子作业指导书系统是一种非常实用的工具&#xff0c;可以帮助企业有效地管理和指导员工的工作。 SOP电子作…

python实现简单的多机并行调度

场景说明 我们有10个任务需要主动发送到3台机器上并行执行&#xff0c;某一台机器执行完成再为此机器分配下一个任务 方案一&#xff1a;消息队列&#xff08;被动调度&#xff09; 此方案可以使用celeryredis实现简单的生产者消费者模型&#xff0c;步骤如下&#xff1a; …

关于单片机的时钟浅谈及STM32F103/F030单片机的内外时钟切换问题

绪论 本文主要讲解单片机的时钟系统的相关知识&#xff0c;并进行超频测试&#xff0c;同时介绍如何在STM32F0单片机上进行内外时钟的切换&#xff0c;在不使用外部晶振或者外部晶振不启动时自动切换内部时钟的方法。 一、杂谈 问题来源于群里的一次问答&#xff1a; 诚然&…

Flatpickr教程:使用JavaScript快速创建一个自定义日期选择器

部分数据来源&#xff1a;ChatGPT 引言 如果您是一个网站开发者&#xff0c;想为自己的网站添加方便易用的日期选择对话框&#xff0c;那么Flatpickr日期选择对话框可能正好符合您的需要。在这篇文章中&#xff0c;我们将详细介绍如何使用Flatpickr日期选择对话框&#xff0c…