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

groupby函数详解 pandas group函数详解 阅读详情
AI摘要

本文深入探讨了Pandas库中的groupby()函数,讲解了如何使用该函数对数据进行分组处理,包括基本操作、多列分组、数据筛选及可视化分析等。通过实例展示了groupby()函数的强大功能。

前言

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

准备

读入的数据是一段学生信息的数据,下面将以这个数据为例进行整理grouby()函数的使用:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

df = pd.read_csv('./data.csv')
print(df)
      Name  Gender  Age  Score
0     Alen    Male   18     80
1      Bob    Male   19     90
2     Cidy  Female   18     93
3   Daniel    Male   20     87
4    Ellen  Female   17     96
5  Frankie    Male   21    100
6     Gate    Male   20     88
7     Hebe  Female   22     98
基本操作

在进行对groupby函数进行学习之前,首先需要明确的是,通过对DataFrame对象调用groupby()函数返回的结果是一个DataFrameGroupBy对象,而不是一个DataFrame或者Series对象,所以,它们中的一些方法或者函数是无法直接调用的,需要按照GroupBy对象中具有的函数和方法进行调用。

grouped = df.groupby('Gender')
print(type(grouped))
print(grouped)

<class 'pandas.core.groupby.groupby.DataFrameGroupBy'>

分组时,不仅仅可以指定一个列名,也可以指定多个列名:

grouped = df.groupby('Gender')
grouped_muti = df.groupby(['Gender', 'Age'])

print(grouped.size())
print(grouped_muti.size())

Gender
Female    3
Male      5
dtype: int64

Gender  Age
Female  17     1
        18     1
        22     1
Male    18     1
        19     1
        20     2
        21     1
dtype: int64

指定多个列名个单个列名后的区别在于,分组的主键或者索引(indice)将一个是单个主键,另一个则是一个元组的形式:

print(grouped.get_group('Female'))
print(grouped_muti.get_group(('Female', 17)))

    Name  Gender  Age  Score
2   Cidy  Female   18     93
4  Ellen  Female   17     96
7   Hebe  Female   22     98
    Name  Gender  Age  Score
4  Ellen  Female   17     96

通过调用get_group()函数可以返回一个按照分组得到的DataFrame对象,所以接下来的使用就可以按照·DataFrame·对象来使用。如果想让这个DataFrame对象的索引重新定义可以通过:

df = grouped.get_group('Female').reset_index()
print(df)

   index   Name  Gender  Age  Score
0      2   Cidy  Female   18     93
1      4  Ellen  Female   17     96
2      7   Hebe  Female   22     98

这里可以总结一下,由于通过groupby()函数分组得到的是一个DataFrameGroupBy对象,而通过对这个对象调用get_group(),返回的则是一个·DataFrame·对象,所以可以将DataFrameGroupBy对象理解为是多个DataFrame组成的。
而没有调用get_group()函数之前,此时的数据结构任然是DataFrameGroupBy,此时进行对DataFrameGroupBy按照列名进行索引,同理就可以得到SeriesGroupBy对象,取多个列名,则得到的任然是DataFrameGroupBy对象,这里可以类比DataFrame和Series的关系。

按照上面的思路理解后,再调用get_group()函数后得到的DataFrame对象按照列名进行索引实际上就是得到了Series的对象,下面的操作就可以按照Series对象中的函数行了。

在没有进行调用get_group(),也就是没有取出特定某一组数据之前,此时的数据结构任然是DataFrameGroupBy,其中也有很多函数和方法可以调用,如max()、count()、std()等,返回的结果是一个DataFrame对象。

print(grouped.count())
print(grouped.max()[['Age', 'Score']])
print(grouped.mean()[['Age', 'Score']])

        Name  Age  Score
Gender                  
Female     3    3      3
Male       5    5      5
        Age  Score
Gender            
Female   22     98
Male     21    100
         Age      Score
Gender                 
Female  19.0  95.666667
Male    19.6  89.000000

如果其中的函数无法满足你的需求,你也可以选择使用聚合函数aggregate,传递numpy或者自定义的函数,前提是返回一个聚合值。

def getSum(data):
    total = 0
    for d in data:
        total+=d
    return total


print(grouped.aggregate(np.median))
print(grouped.aggregate({'Age':np.median, 'Score':np.sum}))
print(grouped.aggregate({'Age':getSum}))

aggregate函数不同于apply,前者是对所有的数值进行一个聚合的操作,而后者则是对每个数值进行单独的一个操作:

def addOne(data):
    return data + 1

df['Age'] = df['Age'].apply(addOne)
df['Age'] = df['Age'].apply(int)
可视化操作

对组内的数据绘制概率密度分布:

grouped['Age'].plot(kind='kde', legend=True)
plt.show()

由于grouped['Age']是一个SeriesGroupby对象, 顾名思义, 就是每一个组都有一个Series. 所以直接plot相当于遍历了每一个组内的Age数据。

REF

groupby官方文档
超好用的 pandas 之 groupby

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

相关推荐

pandas分组与聚合groupby()函数详解

groupby分组与聚合、分层索引、设置是否包含NaN、排除组键,星巴克零售店铺数据下载,星巴克零售店铺directory.csv数据获取,groupby用法详解,pandas分组与聚合,groupby如何使用

我的个人博客 9081

groupby详解

group_by的意思是根据by对数据按照哪个字段进行分组,或者是哪几个字段进行分组。select 字段 from 表名 where 条件 group by 字段或者select 字段 from 表名 group by 字段 having 过滤条件注意:对于过滤条件,可以先用where,再用group by或者是先用group by,再用having(唯一的差别是WHERE过滤行,HAVING过滤组)HAVING支持所有

学习不止境的博客 1万+

【愚公系列】《Python网络爬虫从入门到精通》035-DataFrame数据分组统计整理

在数据分析过程中,数据的分组统计是揭示数据内在规律的重要方法。无论是对销售数据进行汇总,还是分析用户行为,合理的分组统计可以帮助我们更清晰地理解数据背后的趋势和模式。Pandas库中的DataFrame为我们提供了强大的工具,使得分组统计变得简单而高效。本文将深入探讨如何在DataFrame中进行数据分组和统计整理。我们将介绍如何使用Pandas的groupby功能,进行多种汇总操作,包括计数、求和、平均值等。同时,我们还会展示如何处理复杂数据场景,比如多重分组和自定义聚合函数。

愚公智库 10万+

group by详解

group by详解

m0_46914845的博客 1万+

【Pandas数据处理100例】(七十二):Pandas对某列进行分组groupBy()计数操作

该函数可以根据某一列进行分组聚合操作,他会返回一个DataFrameGroupBy。

优快云 精品推荐 1048

告别手动复制粘贴!用R语言脚本批量抓取TCMSP中药靶点基因(附完整代码)

本文介绍如何使用R语言脚本自动化抓取TCMSP数据库中的中药靶点基因数据,告别手动复制粘贴的低效操作。通过详细的代码示例和参数设置,帮助研究人员快速获取并过滤符合药代动力学标准的中药成分及其靶点基因,大幅提升研究效率。特别适合生物信息学和中药现代化研究领域的从业者。

weixin_26950847的博客 261

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

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

weixin_39678163的博客 660

【图神经网络】从0到1使用PyG手把手创建异构图

异构图的准确定义如下:异构图(Heterogeneous Graphs):一个异构图GGG有一组节点V=v1,v2,...,vnV=v_1,v_2,...,v_nV=v1​,v2​,...,vn​和一组边E=e1,e2,...,emE=e_1,e_2,...,e_mE=e1​,e2​,...,em​组成,其中每个节点和每条边都对应着一种类型,用TvT_vTv​表示节点类型的集合,TeT_eTe​表示边类型的集合,一个异构图有两个映射函数,分别将每个节点映射到其对应的类型ϕv:V→Tv\phi_v:V\rig

小哲的博客 7830

Python pandas将excel的数据按月份分组求平均

先观察一下要处理的数据是怎样的,原始文件是有五组分隔开的数据,第一行是表示组名,第二行是列标签,第三行开始才是真正的数据。很容易就会想到使用pandas来处理这个文件了。 首先读取文件并创建一个dataframe对象 import pandas as pd df = pd.read_excel('use_nofillvalue(1).xlsx') 查看df的内容,可以看到列标签很多都是Unamed,是因为本来文件表格就是空的,因此也读取不到内容。而后面使用mean()求平均时,要使用标签Year和Mon

charling____的博客 1万+

中国30米分辨率城市建成区数据集 (1972-2023年)

全国城市建成区空间分布数据(1972-2023年),利用Google Earth Engine平台,基于Landsat系列遥感影像提取了1972–2023年城市不透水面,后经过不透水面聚集密度计算方法计算了不透水面聚集密度,通过阈值划分提取了城市建成区,并设置了建成区面积阈值,去除了噪点,获取了全国城市建成区空间分布数据集。该提取能准确刻画城市形态,提取精度高,保持了建成区的完整性。数据集包括41期数据,1972年,1978年,1985-2023年逐年,分辨率为30米,有栅格和矢量两种格式。

地球资源数据云的官方博客 5824

京东商品数据爬取实战:用Selenium+代理IP绕过最新反爬机制(附完整代码)

本文深入解析京东商品数据采集技术,详细介绍了如何利用Selenium与智能反反爬策略绕过京东最新的反爬机制。通过实战案例和完整代码,帮助开发者掌握高效采集京东商品数据的方法,包括动态参数加密、行为验证识别及分布式采集架构设计等关键技术。

cc789的博客 1058

dataframe,python,numpy 问题索引2

20210713 groupby size()和count的区别 https://blog.youkuaiyun.com/qq_36148333/article/details/114481253 size记录groupby依据的列的数据记录条数 gp=data.groupby([‘查询账号’,‘场景标签’],as_index=True) tj=gp.size().reset_index() 第一种 count记录 groupby 依据的列之外的其他每一列对于分组是否有取值 取值为零的不计入 第二种 ......

kyle1314608的博客 3723

Multisim 14.0元件库下载完整指南:从安装到配置

详细介绍Multisim 14.0版本的元件库下载方法,涵盖安装步骤与后续配置流程,帮助用户快速搭建仿真环境。内容覆盖常见问题及解决方案,让multisim元件库下载更高效、稳定。

weixin_34511754的博客 1931

pandas的iterrows函数和groupby函数

今天整理pandas的iterrow函数和groupby函数,这两个函数还是很常用的,在实际中的应用可以参考数据竞赛修炼笔记之快手用户活跃度的预测 1. pd.iterrows()函数 iterrows() 是在DataFrame中的行进行迭代的一个生成器,它返回每行的索引及一个包含行本身的对象。 所以,当我们在需要遍历行数据的时候,就可以使用 iterrows()方法实现了。 df = pd.D...

Miracle8070 9349

SerDes系列之 SSC扩频时钟技术

扩频时钟,又称展频(SSC-Spread Spectrum Clocking),当前PCIE、DDR、USB等几乎所有的高速接口都支持SSC的功能。电子工程师在日常的电气测试中经常与之接触,在电磁传导和辐射发射验证过程中,经常需要使用到芯片的SSC功能,它的物理表现形式,就是信号的比特率会在一个很小的范围内浮动,多见于周期性变化的时钟信号。

一只豌豆象的博客 3439

【生信分析】clusterProfiler: universal enrichment tool for functional and comparative study(1)

clusterProfiler: universal enrichment tool for functional and comparative studyClusterProfiler: 用于功能和比较研究的通用富集工具总览1. 引言1.1 术语1.1.1 基因集和通路1.1.2 基因同源(GO)1.1.3 京都基因与基因组百科全书(KEGG)1.1.4 其他基因集2. 功能富集分析方法2.1 过度表征分析(Over Representation Analysis)2.2 基因集富集分析(Gene Se

小哲的博客 1363

Pandas中groupby的这些用法你都知道吗?

文章来源:小数志作者:luanhz01 如何理解pandas中的groupby操作groupby是pandas中用于数据分析的一个重要功能,其功能与SQL中的分组操作类似,但功能却更为强...

简说Python的博客 3278

ARFoundation系列讲解-教程目录

一、教程目录 ARFoundation快速入门-01简介 ARFoundation快速入门-02环境搭建 ARFoundation快速入门-03环境配置之iOS ARFoundation快速入门-04环境配置之Android ARFoundation快速入门-05ARKit设备支持列表 ARFoundation快速入门-06ARCore设备支持列表 ARFoundation快速入门-07检查设备支持 ARFoundation快速入门-08平面检..........

a451319296的博客 3万+

Pandas groupby()实战:用星巴克数据教你5种高效分组技巧

本文以星巴克全球门店数据为例,深入讲解Pandas中groupby()函数的5种高效分组技巧。从理解“拆分-应用-合并”核心机制,到单维度汇总、多级分组、处理缺失值、自定义聚合函数,再到分组数据转换、过滤及可视化,帮助数据分析师掌握核心的聚合操作,提升数据处理效率与洞察力。

desk3的博客 1143

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Pandas GroupBy完全指南:从零开始掌握数据分组

通过agg传入字典,如{'分数': ['mean', 'max']},一次输出多个统计值可以自定义函数,比如计算分数超过85分的占比注意自定义函数要处理空值,否则可能报错。

RubyLion28的博客 688

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Pandas groupby分组操作详解:从原理到实战

在数据分析领域,按维度汇总指标是最普遍的需求,而Pandas中的groupby正是实现这类操作的核心工具。本文从分组机制拆解出发,深入浅出地讲解Split-Apply-Combine原理,并系统介绍聚合、变换、过滤三种核心操作的适用场景与取舍方法。通过Top N、百分比分组、多列去重等高频实战案例,帮助读者快速掌握复杂分组技巧。同时针对常见环境问题如PyCharm安装pandas、Python 3.10版本兼容性及类型转换陷阱进行排查,并延伸至parquet/feather格式与性能优化,助力高效数据分析和

weixin_34289454的博客 410

VC中sqlite的使用

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

Pandas高级GroupBy技术详解

仅当所需逻辑无法用内置函数表达时,才使用apply。它速度较慢且难以优化,因此应首先尝试使用agg或transform。这适用于定制规则和小型分组。首先,为你的任务选择正确的模式:使用agg进行缩减,使用transform进行广播,并仅在无法向量化时才保留使用apply。依靠pd.Grouper处理基于时间的时段,依靠排名辅助函数进行前N名选择。通过倾向于清晰、向量化的模式,你可以保持输出扁平化、命名清晰且易于测试,确保你的指标保持正确,你的笔记本运行快速。

codeshare1135的博客 1053
上一篇: 安装xadmin时报错UnicodeDecodeError的解决方法
下一篇: 【vn.py】开发环境搭建
敲代码的quant
敲代码的quant 领域专家: 数据科学与机器学习技术领域 领域专家: 数据科学与机器学习技术领域
博客等级 码龄9年 2万+粉丝 188原创
评论 13
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值