数据仓库与数据挖掘实验练习8

pivot_table()透视表

sales.pivot_table(values = 'Revenue',index = 'Date', columns = 'Name',aggfunc = 'sum',fill_value = 0,margins = True,margins_name = '总计'
)

使用 Pandas 的 pivot_table 函数将一个名为 sales 的 DataFrame 转化为透视表。

1. sales.pivot_table(...)

  • sales: 这是你的 DataFrame 的名称,包含了你要进行透视分析的数据。

2. values='Revenue'

  • values: 指定你要聚合的列的名称,这里是要聚合 Revenue 列。

3. index='Date'

  • index: 指定要作为透视表行索引的列的名称,这里是要按 Date 列进行分组。

4. columns='Name'

  • columns: 指定要作为透视表列索引的列的名称,这里是要按 Name 列进行分组。

5. aggfunc='sum'

  • aggfunc: 指定对 values 列进行的聚合函数,这里是要对 Revenue 列进行求和。

6. fill_value=0

  • fill_value: 指定透视表中缺失值的填充值,这里将所有缺失值填充为 0。

7. margins=True

  • margins: 指定是否计算行和列的总计,这里是要计算总计。

8. margins_name='总计'

  • margins_name: 指定行和列总计的名称,这里将总计的名称设置为 "总计"。

总结:

这段代码将 sales DataFrame 中 Revenue 列的值按照 Date 列和 Name 列进行分组,并使用 sum 函数对每个分组的 Revenue 值进行求和,最终生成一个透视表。透视表中将 Date 列作为行索引,Name 列作为列索引,每个单元格的值表示对应日期和名字的 Revenue 之和。此外,代码还计算了行和列的总计,并将总计的名称设置为 "总计"。

示例:

假设 sales DataFrame 包含以下数据:

DateNameRevenue
2023-01-01Alice100
2023-01-01Bob200
2023-01-02Alice150
2023-01-02Charlie300

执行这段代码后,生成的透视表将如下所示:

AliceBobCharlie总计
2023-01-011002000300
2023-01-021500300450
总计250200300750

stack() 多变单

将一个多层索引 DataFrame(by_name_and_date)转换为一个单层索引 DataFrame。

解释:

  1. by_name_and_date: 这是一个 DataFrame 对象,其索引是多层的。这意味着它的索引包含多个级别,例如,可能包含 Name 和 Date 两个级别。

  2. stack(): 这是一个 Pandas DataFrame 的方法,用于将 DataFrame 的多层索引转换为单层索引。具体来说,它会将 DataFrame 的列索引(最内层索引)提升到行索引中,并将原来的行索引和列索引合并成一个新的行索引。

示例:

 by_name_and_date DataFrame 如下所示:

执行 by_name_and_date.stack() 后,DataFrame 将变为:

unstack() 单变多

将一个多层索引 DataFrame(sales_by_customer)转换为一个具有层次结构的列索引 DataFrame。

解释:

  1. sales_by_customer: 这是一个 DataFrame 对象,其索引是多层的。这意味着它的索引包含多个级别,例如,可能包含 Customer 和 Product 两个级别。

  2. unstack(): 这是一个 Pandas DataFrame 的方法,用于将 DataFrame 的行索引(最内层索引)转换为列索引。具体来说,它会将 DataFrame 的行索引中的一个级别提升到列索引中,形成一个层次结构的列索引。

示例:

sales_by_customer DataFrame 如下所示:

执行 sales_by_customer.unstack() 后,DataFrame 将变为:

melt()

melt()函数用于将宽格式的数据转换为长格式。

重要的参数:

  1. id_vars: 可选参数,指定要保留为标识变量的列名列表。这些列的值将被复制到长格式数据的每一行中,以保持其唯一性。

  2. value_vars: 可选参数,指定要转换为长格式的列名列表。如果未指定,则默认为除了"id_vars"之外的所有列。

  3. var_name: 指定在转换后的DataFrame中,新生成的列(用来表示原宽格式列名)的名称,默认为'variable'。

  4. value_name: 指定在转换后的DataFrame中,新生成的列(用来存放原宽格式列的值)的名称,默认为'value'。

  5. col_level: 如果DataFrame有层次化的列名,此参数可以指定哪一层列名用于melting操作。

  6. ignore_index: 布尔值,默认为False。如果设为True,将重置转换后DataFrame的索引。

  7. pivot_names: 仅在Pandas 1.3及更高版本中可用,用于控制是否将原宽格式列名的层次化信息合并为一个变量名。

宽格式(Wide Format)和长格式(Long Format/Tidy Format)

是数据处理和数据分析中两种常见的数据组织形式。

宽格式的特点是每个变量占据一列,而每个观察对象(如不同的时间点、实验条件等)通常占据一行。这种格式适合于查看某个特定时间点或条件下多个变量的值,但在进行时间序列分析、分组操作或绘制涉及多个变量变化的图表时可能会比较复杂。

长格式则将数据重新组织,使得每个观察结果占据一行,且有明确的变量名和对应的值。一般而言,长格式数据包含三个关键元素:识别变量(如个体ID或时间点)、值变量(测量的数值)和一个或多个变量来标记这些值的属性(如变量名或时间点标签)。这种格式非常适合于统计建模、数据可视化,特别是在需要对不同类别或时间点进行比较和汇总时。

例如,假设我们有一个宽格式的表格记录了几个学生在不同科目上的成绩:

姓名   数学  英语  物理
张三    90    85    88
李四    80    92    90

转换为长格式后,它会变成:

姓名   科目  成绩
张三   数学  90
张三   英语  85
张三   物理  88
李四   数学  80
李四   英语  92
李四   物理  90

在这个转换过程中,每个学生-科目组合变成了一个单独的行,便于分析或绘图时按科目或学生分组。

video_game_sales.melt(id_vars='Name', value_vars='NA')

解释:

  1. video_game_sales: 这是一个 DataFrame 对象,它包含关于电子游戏销售的数据,可能包含多个列,例如游戏名称、地区销售额等。

  2. melt(): 这是一个 Pandas DataFrame 的方法,用于将 DataFrame 从宽格式转换为长格式。它将 DataFrame 中的多个列转换为两个新的列:variable 和 value

  3. id_vars='Name': 指定要保留在 DataFrame 中的标识列,这里是要保留 Name 列,即游戏名称。

  4. value_vars='NA': 指定要转换为长格式的列,这里是要将 NA 列(北美地区的销售额)转换为长格式。

示例:

假设 video_game_sales DataFrame 如下所示:

       Name  NA  EU  JP
0  Super Mario  10  5  2
1     Zelda      8  3  4

执行 video_game_sales.melt(id_vars='Name', value_vars='NA') 后,DataFrame 将变为:

       Name variable  value
0  Super Mario       NA     10
1     Zelda       NA      8

explode()

recipes.explode('Ingredients')

使用 Pandas 的 explode() 方法将 DataFrame recipes 中的 Ingredients 列展开,将每个包含多个食材的列表拆分成独立的行。

解释:

  1. recipes: 这是一个 DataFrame 对象,包含关于食谱的信息,其中 Ingredients 列存储的是每个食谱的食材列表。
  2. explode('Ingredients'): 这是一个 Pandas DataFrame 的方法,用于将 DataFrame 中的指定列展开。explode() 的参数是列名,这里是要展开 Ingredients 列。

示例:

假设 recipes DataFrame 如下所示:

   Name                                    Ingredients
0  Pizza  ['Tomato sauce', 'Cheese', 'Pepperoni']
1  Salad  ['Lettuce', 'Tomato', 'Cucumber']

执行 recipes.explode('Ingredients') 后,DataFrame 将变为:

   Name         Ingredients
0  Pizza  Tomato sauce
1  Pizza           Cheese
2  Pizza       Pepperoni
3  Salad         Lettuce
4  Salad          Tomato
5  Salad        Cucumber

总结:

recipes.explode('Ingredients') 将 DataFrame 中的 Ingredients 列展开,将每个包含多个食材的列表拆分成独立的行,使得每个食材都对应一个独立的行。

练习

1 在 cars 数据集中,聚合汽车价格的总和。在行轴上按燃料类型分组结果。
2 在 cars 数据集中,聚合汽车的数量。在索引轴上按制造商分组,在列轴上按变速箱类型分组。显示行和列的子总数。
3 在 cars 数据集中,聚合汽车价格的平均值。在索引轴上按年份和燃料类型分组,在列轴上按变速箱类型分组。
4 给定上一个挑战中的 DataFrame,将变速箱级别从列轴移动到行轴。
5 将 min_wage 从宽格式转换为窄格式。换句话说,将数据从八个年份列(2010-17)移动到单个列中。

car = pd.read_csv('used_cars.csv')
carmin_wage = pd.read_csv('minimum_wage.csv')
min_wage.head()#1.
car.pivot_table(values = 'Price',index = 'Fuel',aggfunc = 'sum'
)#2.
car.pivot_table(values = 'Price',index = 'Manufacturer',columns = 'Transmission',aggfunc = 'count',margins = True,margins_name = 'Total'
)#3.
car.pivot_table(values = 'Price',index = ['Year','Fuel'],columns = 'Transmission',aggfunc = 'mean'
)#4.
c1 = car.pivot_table(values = 'Price',index = ['Year','Fuel'],columns = 'Transmission',aggfunc = 'mean'
)
c1.stack()#5.
year = ['2010','2011','2012','2013','2014','2015','2016','2017']
min_wage.melt(id_vars = 'State',var_name = 'Year',value_name = 'wage')

 

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

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

相关文章

将写的项目部署到Linux服务器上

一、首先购入一个云Linux服务器 例如:腾讯云,阿里云等(经常会有学生优惠) 这个腾讯云,新用户82元可以使用一年,还是可以的(如果觉得贵,可以和同学一起拼一个~~) 二、连接…

Python实现PPT表格的编写包含新建修改插图(收藏备用)

自动创建一个ppt文件并创建好表格 代码要用到pptx库 pip install python-pptx 创建含有表格的ppt文件代码: from pptx import Presentation from pptx.util import Inches# 创建一个PPT对象 ppt Presentation()# 添加一个幻灯片 slide ppt.slides.add_slide(p…

vscode编译文件夹下所有文件的配置(包含插件和 .json 文件)

文章目录 我所使用的插件.json 文件配置1. c_cpp_properties.json2. launch.json3. settings.json4. tasks.json 如何运行 我所使用的插件 红框中的五个插件是必备的,其中 Code Runner 插件可以在写完一个 .c 或 .cpp 文件后,按下 Crtl R 快捷键快速编…

Kubernetes——Ingress详解

目录 前言——Service策略的作用 1.外部访问方案 2.使用场景和限制 2.1NodePort 2.2LoadBalancer 2.3externalIPs 2.4Ingress 3.Ingress如何实现对外服务 4.LB和Ingress结合起来实现对外服务的过程 一、Ingress 1.定义 2.组成 3.工作原理 4.总结 二、部署Nginx-I…

SQL Server数据库安装部署

目录 一、简介二、安装步骤1、安装包下载2、安装过程 一、简介 SQL Server 是由 Microsoft 公司开发和提供的关系型数据库管理系统(RDBMS)。它是一个功能强大且可靠的数据库平台,广泛用于企业和组织中的数据存储和管理。以下是 SQL Server 的…

Gradio中Button用法及事件监听器click方法使用

Gradio中Button用法及事件监听器click方法使用 瞎想乱记 事情是这样的:入职时面试的是Java,简历中写了会python,刚好最近有个小项目需要用Python实现,老板就将这个项目交给了我,我… 项目中还真遇到了好几个坑&#…

SEO之关键词扩展(二)

初创企业搭建网站的朋友看1号文章;想学习云计算,怎么入门看2号文章谢谢支持: 1、我给不会敲代码又想搭建网站的人建议 2、新手上云 (接上一篇。。。) 5、各种形式的变体 1.同义词 假设核心关键词是酒店,…

Ps:批处理

Ps菜单:文件/自动/批处理 Automate/Batch 批处理 Batch命令可以对一个文件夹中的文件执行事先创建的动作 Actions,从而快速地完成大量的重复性操作,提升工作效率。 提示 1: 可以从 Adobe Bridge 中调用 Photoshop 的批处理命令。 …

被斯坦福抄作业了?在线体验下:国产大模型确实越来越棒啦!

抄袭? 这里不做评价了: 官方仓库 地址:miniCPM-Llama3-V-2_5 免费在线体验地址 链接:Llama3-V-2_5 模型能力: 模型实际体验 问他什么模型:(可能用了它的数据集吧) 图片分析…

「Qt Widget中文示例指南」如何实现一个简单的RHI小部件示例(二)

Qt 是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写,所有平台无差别运行,更提供了几乎所有开发过程中需要用到的工具。如今,Qt已被运用于超过70个行业、数千家企业,支持数百万设备及应用。 本文将为大家演示如…

一次 K8s 故障诊断:从 CPU 高负载到存储挂载泄露根源揭示

一、背景 现代软件部署中,容器技术已成为不可或缺的一环,在云计算和微服务架构中发挥着核心作用。随着容器化应用的普及,确保容器环境的可靠性成为了一个至关重要的任务。这就是容器SRE(Site Reliability Engineering&#xff0c…

【学习笔记】Windows GDI绘图(十)Graphics详解(中)

文章目录 Graphics的方法AddMetafileComment添加注释BeginContainer和EndContainer新建、还原图形容器不指定指定源与目标矩形指定源与目标矩形 Clear清空并填充指定颜色CopyFromScreen截图CopyPixelOperation DrawImage绘制图像DrawImage的GraphicsDrawImageAbort回调ExcludeC…

初识 peerDependencies

目录 初步认识 peerDependencies semver 介绍 # 摘要 # 简介 # 语义化版本控制规范(SemVer) # 合法语义化版本的巴科斯范式语法 # 为什么要使用语义化的版本控制? # FAQ 示例讲解:vue-router 插件 # 说明 声明 验证 初…

在Windows11系统上搭建SFTP服务器

利用OpenSSH搭建SFTP服务器 下载安装部署OpenSSH创建一个测试账户测试链接为SFTP用户配置根目录下载安装部署OpenSSH 参考链接 部署完启动服务要使用管理员模式。 net start sshd创建一个测试账户 使用PC的微软账户是访问不了SFTP的。 需要使用被微软账户覆盖掉的系统账户和…

微信自定义小程序源码系统 众多组件随心搭 各行各业都适用的小程序 带完整的安装代码包以及搭建教程

系统概述 微信自定义小程序源码系统是一款基于微信官方开发框架进行深度定制的源码系统。该系统整合了众多优质组件,通过可视化的拖拽式操作,让开发者无需编写复杂的代码,即可快速搭建出符合自己需求的小程序。同时,该系统支持多…

iTerm2 携手 OpenAI,带来命令行的自然语言革新

在技术不断进步的今天,命令行工具的智能化已成为提升效率的关键。iTerm2,macOS 系统上广受欢迎的开源终端工具,通过最新版本 v3.5 的发布,实现了与 OpenAI 的集成,引领了这一变革。 iTerm2 简介 iTerm2 是一款功能强…

qcom 平台系统签名流程

security boot 平台的东东,oem 可定制的功能有限,只能参考平台文档,可以在高通的网站上搜索:Secure Boot Enablement,然后找对应平台的文档xxx-Secure Boot Enablement User Guide, step by step 操作即可 开机校验流…

CodeBlocks官方主题颜色更换及方法

文章目录 一、前言二 、用工具导入配置文件2.1 运行 cb_share_config.exe文件2.2 替换文件2.3 设置主题 三、配置主题3.1 步骤13.2 步骤23.3 步骤3 四、设置光标4.1 配置字体4.2 展示 行号 五、设置左边行号区域部分六、设置完后的效果七、下载地址 一、前言 Codeblocks 默认的…

【Python系列】Python装饰器

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

【数据结构】图论中求最短路径——迪杰斯特拉算法(Dijkstra)、弗洛伊德算法(Floyd)

目录 最短路径 (*)迪杰斯特拉算法(Dijkstra)迪杰斯特拉算法(Dijkstra)的算法原理: 弗洛伊德算法(Floyd)弗洛伊德算法(Floyd)的算法原理:弗洛伊德算法的&#…