Pandas进阶--map映射,分组聚合和透视pivot_table详解

文章目录

  • 1.Pandas的map映射
    • (1)映射
    • (2)map充当运算工具
  • 2.数据分组和透视
    • (1)分组统计 - groupby功能 是pandas最重要的功能
    • (2)聚合agg
  • 3.透视表pivot_table
    • (1)参数
    • (2)根据胜负字段进行数据的分组,然后对每组数据进行均值计算
    • (3)根据主客场字段进行数据分类后,对分类后的得分字段求最大值、篮板字段求均值和助攻字段求累加和操作
    • (3)#获取所有队主客场的总得分
    • (4)查看主客场下的总得分都是哪些具体球队的得分构成的
    • (5)#查看主客场下的总得分都是哪些具体球队的得分构成的,对于空值,用0填充
    • (6)多条件分类汇总操作

1.Pandas的map映射

(1)映射

  • 映射就是指给一组数据中的每一个元素绑定一个固定的数据
    给Series中的一组数据提供另外一种表现方式,或者说给其绑定一组指定的标签或字符串

案例1:
创建一个df,两列分别是姓名和薪资。然后给其名字起对应的英文名,然后将英文的性别统一转换为中文的性别
data = pd.DataFrame({“name”:[“tom”,“jeery”,“Alex”,“Jason”],“salary”:[10000,20000,15000,25000],“gender”:[“male”,“female”,“male”,“female”]})
data
在这里插入图片描述

做映射
dic = {
“male”:“男”,
“female”:“女”
}

map可以将gender这组数据中的每个元素根据dic表示的关系,进行映射转换
在这里插入图片描述

data[“性别”]= data[“gender”].map(dic)
data
在这里插入图片描述

案例2:
将文本中的名字映射出英文名字
首先根据本地文件创建个df
在这里插入图片描述

#给每个人起一个英文名,将其作为表格中新的一列存在
dic = {
‘张三’:‘Tom’,
‘李四’:‘Jerry’,
‘王五’:‘Jay’
}#映射关系表
df[‘ename’] = df[‘name’].map(dic)
df

在这里插入图片描述

(2)map充当运算工具

#将每一个人的税后薪资进行计算:超过5000部分的钱需要缴纳25%的税
def after_sal(s): #参数s就依次表示每一个人的薪资数据
return s - (s-5000)*0.25
data[‘after_sal’] = data[‘salary’].map(after_sal)
data
在这里插入图片描述

总结:map传入的参数是个字典,是做映射的。传入的是个函数名,是做运算用的

可以用匿名函数
#匿名函数写法
data[‘after_sal’] = data[‘salary’].map(lambda s: s - (s-5000)*0.25)
data
在这里插入图片描述

当然也可以用apply,新版的没有axis参数了
apply运算效率远远高于map,在数据数量级比较大的时候,经常用apply
在这里插入图片描述

data[“after_sal”]=data[“salary”].apply(lambda x: x - (x - 5000)*0.25)
data
在这里插入图片描述

案例3:
将每个人的入职日期加两年,目前入职日期是字符串类型数据
data = pd.DataFrame({“name”:[“tom”,“jeery”,“Alex”,“Jason”],“salary”:[10000,20000,15000,25000],“gender”:[“male”,“female”,“male”,“female”],“hiredate”:[“2020-10-10”,“2012–9-12”,“2021–4-23”,“2022-05-16”]})
data
在这里插入图片描述

我们用apply来做
获取入职日期,根据- 做切分得到年份,加2
def get_date(x):
year,month,day = x.split(“-”)
year = int(year)+2
return str(year)+“-”+month+“-”+day
data[‘hiredate’] = data[‘hiredate’].apply(get_date)
data
在这里插入图片描述

用map也可以
def get_date(x):
year,month,day = x.split(“-”)
year = int(year)+2
return str(year)+“-”+month+“-”+day
data[‘hiredate’] = data[‘hiredate’].map(get_date)
data
在这里插入图片描述

2.数据分组和透视

分组与聚合通常是分析数据的一种方式,通常与一些统计函数一起使用,查看数据的分组情况

数据分类处理的核心:
groupby()函数
groups属性查看分组情况

(1)分组统计 - groupby功能 是pandas最重要的功能

① 根据某些条件将数据拆分成组
② 对每个组独立应用函数
③ 将结果合并到一个数据结构中

Dataframe在行(axis=0)或列(axis=1)上进行分组,将一个函数应用到各个分组并产生一个新值,然后函数执行结果被合并到最终的结果对象中。

df.groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=False, **kwargs)
api:

学习要善于掌握规律,你不管学什么函数,都要先学习其功能,参数,返回值都是啥。这样才能比较清晰的运用
在这里插入图片描述

参数详解:
by参数用于指定要进行分组的列名,可以是一个列名或者多个列名的列表
axis参数用于指定分组方向,0表示行方向,1表示列方向
level参数用于指定分组级别
as_index参数用于指定分组后的结果是否作为DataFrame的索引
sort参数用于指定分组结果是否按照分组列进行排序
group_keys参数用于指定分组后是否保留分组键
squeeze参数用于指定是否移除单元素的分组
observed参数用于指定是否观察数据的层次结构

import pandas as pd

#加载数据
df = pd.read_csv(‘fruits.csv’).drop(columns=‘Unnamed: 0’)
df
在这里插入图片描述

#想根据不同水果种类对数据进行分组
df.groupby(by=‘item’).groups #使用groupby分组后,调用groups查看分组的结果
Apple是 第0行和第5行。Banada 是第1行和第3行。Orange是第2行和第4行
在这里插入图片描述

#计算不同水果的平均价格
df.groupby(by=‘item’)[‘price’] #单独取出每组数据的价格数据
mean_price = df.groupby(by=‘item’)[‘price’].mean() #求均值
mean_price

在这里插入图片描述

to_dict() 可以将dataframe转换为dict
mean_price.to_dict()
在这里插入图片描述

#将每种水果的平均价格汇总到原始表格中
现在无法直接将平均价格series数据直接插入到原始数据,因为数据结构不一样

此时就可以用到我们之前学的map

dic = {
‘Apple’:3.00,
‘Banana’:2.75,
‘Orange’:3.50
}
#dic = mean_price.to_dict()

df[‘mean_price’] = df[‘item’].map(dic)
df
在这里插入图片描述

#计算不同颜色水果的最大重量
color_max_weight = df.groupby(by=‘color’)[‘weight’].max()
color_max_weight

在这里插入图片描述

将不同颜色水果的最大重量也汇总到原始数据中
df[‘max_weight’] = df[‘color’].map(color_max_weight.to_dict())
df

在这里插入图片描述

使用groupby分组后,也可以使用功能transform和apply提供自定义函数实现更多运算
apply和transform的区别:
transform返回的结果是经过映射后的结果
apply返回的是没经过映射的结果

案例:
计算每种水果最大价格和最低价格的差值

def func(x): # 此时的x是每种水果的所有价格
return x.max()-x.min()

df [‘price_cha’] = df.groupby(by=“item”)[‘price’].transform(func)
df
在这里插入图片描述

此时,用apply就得不到值
在这里插入图片描述

apply得到的值是:

#计算每种水果最大价格和最低价格的差值

def func(x): # 此时的x是每种水果的所有价格
return x.max()-x.min()

df.groupby(by=‘item’)[‘price’].apply(func)

能得到结果,但是没经过映射,没法直接添加到原始数据。还需要转化成字典,使用map才能映射
在这里插入图片描述

#计算每种水果最大价格和最低价格的差值

def func(x): # 此时的x是每种水果的所有价格
return x.max()-x.min()

dic = df.groupby(by=‘item’)[‘price’].apply(func).to_dict()

df[‘price_cha’] = df[‘item’].map(dic)
df
在这里插入图片描述

(2)聚合agg

对分组后的结果进行多种不同形式的聚合操作
#求每种水果的平均价格和最高价格、最低价格
df.groupby(by=‘item’)[‘price’].agg([‘mean’,‘max’,‘min’])
在这里插入图片描述

3.透视表pivot_table

透视表是一种可以对数据动态排布并且分类汇总的表格格式。
或许大多数人都在Excel使用过数据透视表,也体会到它的强大功能,而在pandas中它被称作pivot_table。
在这里插入图片描述

(1)参数

values:被计算的数据项,设定需要被聚合操作的列(需要显示的列) 对哪个值进行计算
index:每个pivot_table必须拥有一个index,必选参数,设定数据的行索引,可以设置多层索引,多次索引时按照需求确定索引顺序。 根据什么分类
columns:必选参数,设定列索引,用来显示字符型数据,和fill_value搭配使用。
aggfunc:聚合函数, pivot_table后新dataframe的值都会通过aggfunc进行运算。默认numpy.mean求平均。
fill_values:填充NA值(设定缺省值)。默认不填充,可以指定。
margins:添加行列的总计,默认FALSE不显示。TRUE显示。
dropna:如果整行都为NA值,则进行丢弃,默认TRUE丢弃。FALSE时,被保留。
margins_name:margins = True 时,设定margins 行/列的名称。‘all’ 默认值

#加载数据
df = pd.read_csv(‘透视表-篮球赛.csv’)
df.head(3)
在这里插入图片描述

#根据对手分类,计算每个球队的平均分
新版的不能对字符串的列进行计算
在这里插入图片描述

必须指定数字的列

df.pivot_table(index=‘对手’,values=‘得分’,aggfunc=‘mean’) #aggfunc默认是mean,求平均
在这里插入图片描述

(2)根据胜负字段进行数据的分组,然后对每组数据进行均值计算

df.pivot_table(index=‘对手’,values=[‘命中’,‘投篮数’,‘投篮命中率’,‘3分命中率’,‘篮板’,‘助攻’,‘得分’])
在这里插入图片描述

默认aggfunc只能举个一个参数,要想聚合多个参数,使用字典 。values这个字段就不要了

(3)根据主客场字段进行数据分类后,对分类后的得分字段求最大值、篮板字段求均值和助攻字段求累加和操作

df.pivot_table(index=‘主客场’,aggfunc={‘得分’:‘max’,‘篮板’:‘mean’,‘助攻’:‘sum’})

在这里插入图片描述

(3)#获取所有队主客场的总得分

df.pivot_table(index=‘主客场’,values=‘得分’,aggfunc=‘sum’)

在这里插入图片描述

(4)查看主客场下的总得分都是哪些具体球队的得分构成的

df.pivot_table(index=‘主客场’,values=‘得分’,aggfunc=‘sum’,columns=‘对手’)
在这里插入图片描述

(5)#查看主客场下的总得分都是哪些具体球队的得分构成的,对于空值,用0填充

df.pivot_table(index=‘主客场’,values=‘得分’,aggfunc=‘sum’,columns=‘对手’,fill_value=0)
在这里插入图片描述

(6)多条件分类汇总操作

df.pivot_table(index=[‘主客场’,‘对手’],values=‘得分’,aggfunc=‘sum’)
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【大厂AI课学习笔记】1.3 人工智能产业发展(4)——泛在的人工智能

人工智能走向泛在。 泛在,就是广泛存在。(下图来自腾讯AI课。) 没办法,被百度抛弃了,想学习,课程打不开,只好投想腾讯的怀抱。 之前考过腾讯云的认证,课程做的还是条理很清晰。 主…

铁轨语义分割(Unet结合resnet系列)

数据介绍 一类是图片,一类是图像标签。 引入库,处理数据 import torch.nn as nn import torch import torch.nn.functional as F import os from PIL import Image import torch from torch.utils.data import Dataset import torchvision.transfor…

QEMU源码全解析 —— 内存虚拟化(1)

接前一篇文章: 本文内容参考: 《趣谈Linux操作系统》 —— 刘超,极客时间 《QEMU/KVM》源码解析与应用 —— 李强,机械工业出版社 内存虚拟化硬件基础——EPT 特此致谢! 内存虚拟化简介 内存是计算机必不可少的组成…

C languange DGEQRF 示例,link liblapack.a

1.示例源码 #include <stdio.h>int min(int m, int n){ return m<n? m:n;}void print_matrix(double* A, int m, int n, int lda) {for (int i 0; i < m; i){for (int j 0; j < n; j){//printf("%7.4f ", A[i j*lda]);printf("%7.4f, &quo…

【数据结构】分治策略

现场保护和现场恢复 文章目录 分治策略分治法解决问题有以下四个特征&#xff1a;分治法步骤: 递归&#xff1a;解决以下问题&#xff1a;倒序输出整数求最大公约数&#xff08;递归和非递归&#xff09;菲波那切数列 不要尝试间接 要使用直接递归&#xff08;自己调用自己&am…

创建与删除数据库(四)

创建与删除数据库&#xff08;四&#xff09; 一、创建数据库 1.1 使用DDL语句创建数据库 CREATE DATABASE 数据库名 DEFAULT CHARACTER 示例&#xff1a; 创建一个test 的数据库&#xff0c;并查看该数据库&#xff0c;以及该数据库的编码。 创建数据库&#xff1a; cre…

MATLAB Fundamentals>>>Centering and Scaling

MATLAB Fundamentals>Common Data Analysis Techniques>Polynomial Fitting>Centering and Scaling 数据导入 This code sets up the activity. yr 2000:2007 penguins [5.49 7.03 7.73 7.70 9.29 9.21 11.89 10.85] 附加练习 How does the model look?…

嵌入式——数字/模拟转换模块(DAC)

目录 一、初识DAC 1. 介绍 2. DAC主要特性 3. DAC的特性参数 二、相关寄存器 1. 控制寄存器&#xff08;DAC_CR&#xff09; 2. DAC通道1 的12位右对齐数据保持寄存器&#xff08;DAC_DHR12R1&#xff09; 3. 通道1数据输出寄存器&#xff08;DAC_DOR1&#xff09; 三…

C# .Net Framework Swagger

1.安装 Swagger 在NuGet程序包中安装以下文件 Swashbuckle: Swagger&#xff1a; Swagger.Net: 2.在项目APP_Start 文件夹下面找到 SwaggerNet.cs文件 1.注释掉这两行代码 2.将PreStart方法的内容修改为以下 public static void PreStart() {RouteTable.Routes.MapHttpRoute(…

Message Queue --- RabbitMQ

MessageQueue Intro 什么是MQ为什么使用MQ常见的MQ 什么是MQ MQ全称是Message Queue&#xff0c;消息的队列&#xff0c;因为是队列&#xff0c;所以遵循FIFO 先进先出的原则&#xff0c;它是一种跨进程的通信机制&#xff0c;用于上下游传递消息。在互联网架构中&#xff0c;M…

Win搭建PalWorld服务器,幻兽帕鲁开服联机教程,0基础保姆级教程

Windows系统搭建幻兽帕鲁私服&#xff0c;PalWorld开服联机教程&#xff0c;零基础保姆级教程。 最近这游戏挺火&#xff0c;很多人想跟朋友联机&#xff0c;如果有专用服务器&#xff0c;就不需要房主一直开着电脑&#xff0c;稳定性也好得多。 视频教程&#xff1a;https:/…

vue-cli组件的使用

一、前言 ​ 本文介绍 vue-cli组件的使用&#xff0c;基于已经搭建好的基础项目。关于 vue-cli 构建项目的详细流程&#xff0c;可参考博文&#xff1a;使用vue脚手架构建项目 二、使用步骤 1、创建Header.vue组件 在components 目录下创建 Header.vue 编写Header.vue <…

figure方法详解之清除图形内容

figure方法详解之清除图形内容 一 clf():二 clear():三 clear()方法和clf()方法的区别&#xff1a; 前言 Hello 大家好&#xff01;我是甜美的江。 在数据可视化中&#xff0c;Matplotlib 是一个功能强大且广泛使用的库&#xff0c;它提供了各种方法来创建高质量的图形。在 Mat…

SSE长连接( SpringBoot整合SSE(Server-Sent Events)可以实现后端主动向前端推送数据)

Demo代码分享 依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.or…

Java编程练习之类的封装2

1.封装一个股票&#xff08;Stock&#xff09;类&#xff0c;大盘名称为上证A股&#xff0c;前一日的收盘点是2844.70点&#xff0c;设置新的当前值如2910.02点&#xff0c;控制台既要显示以上信息&#xff0c;又要显示涨跌幅度以及点数变化的百分比。运行效果如下&#xff1a;…

【2024美国大学生数学建模竞赛】2024美赛C题 问题分析、数学模型、实现代码、完整论文

【2023美国大学生数学建模竞赛】2024美赛C题 问题分析、数学模型、实现代码、完整论文 引言 题目将于2024年2月2日6:00发布。我们团队将会在8点前准时更新问题分析&#xff0c;逐步更新数学模型和实现代码&#xff0c;最后发布完整的论文。 更新进展&#xff1a; &#xff08;…

朋友,我在项目挺好的

2024年&#xff0c;是优橙教育成立第7年。过去6年&#xff0c;我们迎来送往&#xff0c;曾与一届届网优人并肩作战。 今天&#xff0c;我们不问所在何处&#xff1f;只想遥问曾在优橙的每一个你 嘿&#xff01;朋友&#xff0c;最近过得怎么样&#xff1f;现在的你和曾经的自…

IEC 104电力规约详细解读(二) - 总召唤

1功能简述 总召唤功能是在初始化以后进行&#xff0c;或者是定期进行总召唤&#xff0c;以刷新主站的数据库。总召唤时请求子站传送所有的过程的变量实际值。定期进行总召唤的周期的是一个系统参数&#xff0c;可以是15分钟或者更长的时间。 总召唤的内容包括子站的遥信、遥测…

【软件设计师笔记】计算机系统基础知识考点

&#x1f413; 计算机系统组成 计算机系统是由硬件和软件组成的&#xff0c;它们协同工作来运行程序。计算机的基本硬件系统由 运算器、控制器、存储器、输入设备和输出设备5大部件组成。运算器、控制器等部件被集成 在一起统称为中央处理单元&#xff08;Central Processing …

springboot+AOP+自定义注解+RBAC自定义操作权限管理02

springbootAOP自定义注解RBAC自定义操作权限管理02!经过上一次的凑话部署&#xff0c;我们这一次&#xff0c;增加了一个后端管理系统菜单栏的访问权限的数据表。用角色表&#xff0c;和这张菜单栏的数据表进行映射。不同的角色&#xff0c;可以看见不同的菜单栏目。 这个就是菜…