pandas——groupby操作

news2024/12/22 23:34:46

Pandas——groupby操作


文章目录

  • Pandas——groupby操作
  • 一、实验目的
  • 二、实验原理
  • 三、实验环境
  • 四、实验内容
  • 五、实验步骤


一、实验目的

熟练掌握pandas中的groupby操作

二、实验原理

groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=False)

参数说明:

by是指分组依据(列表、字典、函数,元组,Series)

axis:是作用维度(0为行,1为列)

level:根据索引级别分组

sort:对groupby分组后新的dataframe中索引进行排序,sort=True为升序,

as_index:在groupby中使用的键是否成为新的dataframe中的索引,默认as_index=True

group_keys:在调用apply时,将group键添加到索引中以识别片段

squeeze :如果可能的话,减少返回类型的维数,否则返回一个一致的类型

grouping操作(split-apply-combine)

数据的分组&聚合 – 什么是groupby 技术?

在数据分析中,我们往往需要在将数据拆分,在每一个特定的组里进行运算。比如根据教育水平和年龄段计算某个城市的工作人口的平均收入。

pandas中的groupby提供了一个高效的数据的分组运算。

我们通过一个或者多个分类变量将数据拆分,然后分别在拆分以后的数据上进行需要的计算

我们可以把上述过程理解为三部:

1.拆分数据(split)

2.应用某个函数(apply)

3.汇总计算结果(aggregate)

下面这个演示图展示了“分拆-应用-汇总”的groupby思想

在这里插入图片描述

上图所示,分解步骤:

Step1 :数据分组—— groupby 方法

Step2 :数据聚合:

使用内置函数——sum / mean / max / min / count等
使用自定义函数—— agg ( aggregate ) 方法
自定义更丰富的分组运算—— apply 方法

三、实验环境

Python 3.6.1

Jupyter

四、实验内容

练习pandas中的groupby的操作案例

五、实验步骤

1.创建一个数据帧df。

import numpy as np  
import pandas as pd  
df = pd.DataFrame({'A' : ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],'B' : ['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three'],'C' : np.random.randn(8),'D' : np.random.randn(8)})  
print(df) 

在这里插入图片描述

2.通过A列对df进行分布操作。

df.groupby('A')  

在这里插入图片描述

3.通过A、B列对df进行分组操作。

df.groupby(['A','B'])  

在这里插入图片描述

4…使用自定义函数进行分组操作,自定义一个函数,使用groupby方法并使用自定义函数给定的条件,按列对df进行分组。

def get_letter_type(letter):  
    if letter.lower() in 'aeiou':  
        return 'vowel'  
    else:  
        return 'consonant'  
  
grouped = df.groupby(get_letter_type, axis=1)  
for group in grouped:  
    print(group) 

在这里插入图片描述

5.创建一个Series名为s,使用groupby根据s的索引对s进行分组,返回分组后的新Series,对新Series进行first、last、sum操作。

lst = [1, 2, 3, 1, 2, 3]  
s = pd.Series([1, 2, 3, 10, 20, 30], lst)  
grouped = s.groupby(level=0)  
#查看分组后的第一行数据  
grouped.first()  
#查看分组后的最后一行数据  
grouped.last()  
#对分组的各组进行求和  
grouped.sum()  

在这里插入图片描述

6.分组排序,使用groupby进行分组时,默认是按分组后索引进行升序排列,在groupby方法中加入sort=False参数,可以进行降序排列。

df2=pd.DataFrame({'X':['B','B','A','A'],'Y':[1,2,3,4]})  
#按X列对df2进行分组,并求每组的和  
df2.groupby(['X']).sum()  
#按X列对df2进行分组,分组时不对键进行排序,并求每组的和  
df2.groupby(['X'],sort=False).sum()  

在这里插入图片描述

7.使用get_group方法得到分组后某组的值。

df3 = pd.DataFrame({'X' : ['A', 'B', 'A', 'B'], 'Y' : [1, 4, 3, 2]})  
#按X列df3进行分组,并得到A组的df3值  
df3.groupby(['X']).get_group('A')  
#按X列df3进行分组,并得到B组的df3值  
df3.groupby(['X']).get_group('B')  

在这里插入图片描述

8.使用groups方法得到分组后所有组的值。

df.groupby('A').groups  
df.groupby(['A','B']).groups  

在这里插入图片描述

9.多级索引分组,创建一个有两级索引的Series,并使用两个方法对Series进行分组并求和。

arrays = [['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux'],['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two']]  
index=pd.MultiIndex.from_arrays(arrays,names=['first','second'])  
s=pd.Series(np.random.randn(8),index=index)  
s.groupby(level=0).sum()  
s.groupby(level='second').sum() 

在这里插入图片描述

10.复合分组,对s按first、second进行分组并求和。

s.groupby(level=['first', 'second']).sum() 

在这里插入图片描述

11.复合分组(按索引和列),创建数据帧df,使用索引级别和列对df进行分组。

arrays = [['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux'],['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two']]  
index = pd.MultiIndex.from_arrays(arrays, names=['first', 'second'])  
df = pd.DataFrame({'A': [1, 1, 1, 1, 2, 2, 3, 3], 'B': np.arange(8)},index=index)  
print(df)  
df.groupby([pd.Grouper(level=1),'A']).sum()  

在这里插入图片描述

12.对df进行分组,将分组后C列的值赋值给grouped,统计grouped中每类的个数。

df = pd.DataFrame({'A' : ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],'B' : ['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three'],'C' : np.random.randn(8),'D' : np.random.randn(8)})  
grouped=df.groupby(['A'])  
grouped_C=grouped['C']  
print(grouped_C.count())  

在这里插入图片描述

13.对上面创建的df的C列,按A列值进行分组并求和。

df['C'].groupby(df['A']).sum()  

在这里插入图片描述

14.遍历分组结果,通过A,B两列对df进行分组,分组结果的组名为元组。

for name, group in df.groupby(['A', 'B']):  
    print(name)  
    print(group)  

在这里插入图片描述

15.通过A列对df进行分组,并查看分组对象的bar列。

df.groupby(['A']).get_group(('bar'))  

在这里插入图片描述

16.按A,B两列对df进行分组,并查看分组对象中bar、one都存在的部分。

df.groupby(['A','B']).get_group(('bar','one'))  

在这里插入图片描述

注意:当分组按两列来分时,查看分组对象也应该包含每列的一部分。

17.聚合操作,按A列对df进行分组,使用聚合函数aggregate求每组的和。

grouped=df.groupby(['A'])  
grouped.aggregate(np.sum) 

在这里插入图片描述

按A、B两列对df进行分组,并使用聚合函数aggregate对每组求和。

grouped=df.groupby(['A','B'])  
grouped.aggregate(np.sum) 

在这里插入图片描述

注意:通过上面的结果可以看到。聚合完成后每组都有一个组名作为新的索引,使用as_index=False可以忽略组名。

18.当as_index=True时,在groupby中使用的键将成为新的dataframe中的索引。按A、B两列对df进行分组,这是使参数as_index=False,再使用聚合函数aggregate求每组的和.

grouped=df.groupby(['A','B'],as_index=False)  
grouped.aggregate(np.sum)  

在这里插入图片描述

19.聚合操作,按A、B列对df进行分组,使用size方法,求每组的大小。返回一个Series,索引是组名,值是每组的大小。

grouped=df.groupby(['A','B'])  
grouped.size() 

在这里插入图片描述

20.聚合操作,对分组grouped进行统计描述。

grouped.describe()  

在这里插入图片描述

注意:聚合函数可以减少数据帧的维度,常用的聚合函数有:mean、sum、size、count、std、var、sem 、describe、first、last、nth、min、max。
执行多个函数在一个分组结果上:在分组返回的Series中我们可以通过一个聚合函数的列表或一个字典去操作series,返回一个DataFrame。


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

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

相关文章

STM32单片机GSM短信自动存取快递柜

实践制作DIY- GC0104-自动存取快递柜 一、功能说明: 基于STM32单片机设计-自动存取快递柜 二、功能介绍: STM32F103C系列最小系统板0.96寸OLED显示器DY-SV17F串口语音播报模块4*4矩阵键盘GSM短信模块4路舵机(模拟4个柜子) ***…

动规规划-完全背包问题

有N件物品和一个最多能背重量为W的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品都有无限个(也就是可以放入背包多次),求解将哪些物品装入背包里物品价值总和最大。 首先回顾一下0-1背包问题,它和…

【寒假day4】leetcode刷题

🌈一、选择题❤1.下列哪一个是析构函数的特征( )。A: 析构函数定义只能在类体内 B: 一个类中只能定义一个析构函数 C: 析构函数名与类名相同 D: 析构函数可以有一个或多个参数答案:B答案解析:析构函数是构造函…

练 习

1.判断三个中最重的//依次输入相应的人的体重double people1, people2, people3;cout << "请输入第一个人体重" << endl;cin >> people1;cout << "请输入第二个人体重" << endl;cin >> people2;cout << "请…

开发人员与测试人员关系的理解

在软件开发中都会有开发人员&#xff08;以下简称开发&#xff09;和测试人员&#xff08;以下简称测试&#xff09;&#xff0c;在一些小型公司可能并没有测试&#xff0c;仅仅是开发兼任测试。在这里我仅针对于有专业的测试和专业的开发的项目。 每个公司应该都有考核机制&am…

solidwork中添加GB型材库以及使用

在使用solidwork设计遮光罩的时候&#xff0c;需要铝型材作为支架&#xff0c;铝型材如果自己去画设计可能浪费时间不说&#xff0c;还得去找对应型号。默认solidwork中没有国标的型材库。网上教程导入型材库路径是错误的&#xff0c;所以在复制完后打开solidwork找不见型材库 …

Ubuntu小操作

安装拼音输入法 sudo apt-get install ibus-pinyin点击加号 点击other 输入 chinese 使用 winspace 切换 可以在键盘快捷键处改变快捷键 安装ADB sudo apt-get install android-tools-adb编写规则 sudo gedit /etc/udev/rules.d/80-android.rules写入(其中红色字体部…

面试实战篇 | 快手本地生活,结合项目谈Redis实战项目场景?MySQL InnoDB存储引擎如何工作的?策略模式?

本期是【你好&#xff0c;面试官】系列文章的第21期&#xff0c;持续更新中…。 《你好&#xff0c;面试官》系列目前已经连载20篇了&#xff0c;据说看了这个系列的朋友都拿到了大厂offer~ 你好&#xff0c;面试官 | 你真的理解面向 “对象”&#xff1f;你好&#xff0c;面…

在Flask中构建API接口的相关概念

重定向行为斜杠以下两个路由的不同之处在于是否使用尾部的斜杠。第一个路由的URL尾部有一个斜杠&#xff0c;看起来就像一个文件夹&#xff0c;访问一个没有斜杠结尾的URL时&#xff0c;Flask会自动进行重定向&#xff0c;在结尾加上一个斜杠。第二个路由的URL没有尾部斜杠&…

ChatGpt-2 对话单页功能实现vue3+elementplus

接口可参照CHATGPT.NET自行实现 <script setup> import { RouterLink, RouterView } from "vue-router"; import HelloWorld from "./components/HelloWorld.vue"; import { MoreFilled ,CircleCheck} from "element-plus/icons-vue"; …

GIS数据格式坐标转换(地球坐标WGS84、GCJ-02、火星坐标、百度坐标BD-09、国家大地坐标系CGCS2000)

文章目录前言一、坐标系1.地球坐标 (WGS84)2.国测局坐标系(GCJ-02、火星坐标系)3.百度坐标(BD-09)4.国家大地2000坐标系(CGCS2000)二、百度坐标系(BD-09) 与火星坐标系(GCJ-02)的转换1.核心代码2.转换验证百度地图高德地图腾讯地图三、火星坐标系 (GCJ-02) 与百度坐标系 (BD-09…

【青训营】RPC框架分层设计简述

远程函数调用&#xff0c;Remote Procedute Calls&#xff0c;简称RPC。RPC需要解决的问题有&#xff1a;完成远程函数的映射&#xff0c;并且将数据转化为字节流&#xff0c;使用网络进行传输 RPC基本概念 IDL文件&#xff1a;IDL通过一种中立的方式来描述接口&#xff0c;使…

OpenCV 图像梯度算子

本文是OpenCV图像视觉入门之路的第12篇文章&#xff0c;本文详细的介绍了图像梯度算子的各种操作&#xff0c;例如&#xff1a;Sobel算子Scharr算子laplacian算子等操作。 OpenCV 图像梯度算子目录 1 Sobel算子 2 Scharr算子 3 laplacian算子 1 Sobel算子 Sobel算子是一种图…

.Net Core对于`RabbitMQ`封装分布式事件总线

首先我们需要了解到分布式事件总线是什么&#xff1b;分布式事件总线是一种在分布式系统中提供事件通知、订阅和发布机制的技术。它允许多个组件或微服务之间的协作和通信&#xff0c;而无需直接耦合或了解彼此的实现细节。通过事件总线&#xff0c;组件或微服务可以通过发布或…

基于STM32的虚拟示波器

仓库地址 https://github.com/shuai132/ScopeMCU ScopeMCU Oscilloscope for MCU MCU: STM32F103C8Tx 需配合ScopeGUI使用 截图说明见wiki 最新版Releases Introduction 用最少的硬件成本&#xff0c;做一个实用的虚拟示波器。 这是硬件部分&#xff0c;基于STM32最小…

提取DataFrame中每一行的DataFrame.itertuples()方法

【小白从小学Python、C、Java】【计算机等级考试500强双证书】【Python-数据分析】提取DataFrame中的每一行DataFrame.itertuples()选择题关于以下python代码说法错误的一项是?import pandas as pddf pd.DataFrame({A:[a1,a2],B:[b1,b2]},index[i1,i2])print("【显示】d…

基于SpringBoot实现ChatGPT-QQ机器人

概述 近期ChatGPT火爆全球&#xff0c;在其官方网站上也列举了非常全面的应用案例&#xff0c;仅仅上线两个月活跃用户数已经达到1亿&#xff0c;成为历史上用户数增长最快的面向消费者的应用 快速体验 OpenAI官网对外提供了标准的 API 接口&#xff0c;可以通过HTTP请求进行…

SignalR注册成Windows后台服务,并实现web前端断线重连

注意下文里面的 SignalR 不是 Core 版本&#xff0c;而是 Framework 下的 本文使用的方式是把 SignalR 写在控制台项目里&#xff0c;再用 Topshelf 注册成 Windows 服务 这样做有两点好处 传统 Window 服务项目调试时需要“附加到进程”&#xff0c;开发体验比较差&#xf…

RibbitMQ 入门到应用 ( 二 ) 安装

3.安装基本操作 3.1.下载安装 3.1.1.官网 下载地址 https://rabbitmq.com/download.html 与Erlang语言对应版本 https://rabbitmq.com/which-erlang.html 3.1.2.安装 Erlang 在确定了RabbitMQ版本号后&#xff0c;先下载安装Erlang环境 Erlang下载链接 https://packa…

vue通用后台管理系统

用到的js库 遇到的问题 vuex和 localStorage区别 vuex在内存中&#xff0c;localStorage存在本地localStorage只能存储字符串类型数据&#xff0c;存储对象需要JSON.stringify() 和 parse()…读取内存比读取硬盘速度要快刷新页面vuex数据丢失&#xff0c;localStorage不会vuex…