我的编程空间,编程开发者的网络收藏夹
学习永远不晚

SQL、Pandas和Spark:如何实现数据透视表?

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

SQL、Pandas和Spark:如何实现数据透视表?

 01 数据透视表简介

数据透视表,顾名思义,就是通过对数据执行一定的"透视",完成对复杂数据的分析统计功能,常常伴随降维的效果。例如在Excel工具栏数据透视表选项卡中通过悬浮鼠标可以看到这样的描述:

在上述简介中,有两个关键词值得注意:排列和汇总,其中汇总意味着要产生聚合统计,即groupby操作;排列则实际上隐含着使汇总后的结果有序。当然,如果说只实现这两个需求还不能完全表达出数据透视表与常规的groupby有何区别,所以不妨首先看个例子:

给定经典的titanic数据集,我们需要统计不同性别下的生还人数,则可以进行如下设置:

而后,即可得到如下结果:

通过上表,明显可以看出女性中约有2/3的人得以生还,而男性中则仅有不到20%的人得以生还。当然,这是数据透视表的最基本操作,大家应该也都熟悉,本文不做过多展开。

值得补充的是:实际上为了完成不同性别下的生还人数,我们完全可以使用groupby(sex, survived)这两个字段+count实现这一需求,而数据透视表则仅仅是在此基础上进一步完成行转列的pivot操作而已。理解了数据透视表的这一核心功能,对于我们下面介绍数据透视表在三大工具中的适用将非常有帮助!

02 Pandas实现数据透视表

在三大工具中,Pandas实现数据透视表可能是最为简单且又最能支持自定义操作的工具。首先,给出一个自定义的dataframe如下,仅构造name,sex,survived三个字段,示例数据如下:

基于上述数据集实现不同性别下的生还人数统计,运用pandas十分容易。这里给出Pandas中数据透视表的API介绍:

可以明显注意到该函数的4个主要参数:

  •  values:对哪一列进行汇总统计,在此需求中即为name字段;
  •  index:汇总后以哪一列作为行,在此需求中即为sex字段;
  •  columns:汇总后以哪一列作为列,在此需求中即为survived;
  •  aggfunc:执行什么聚合函数,在此需求中即为count,该参数的默认参数为mean,但只适用于数值字段。

而后,分别传入相应参数,得到数据透视表结果如下:

上述需求很简单,需要注意以下两点:

  •  pandas中的pivot_table还支持其他多个参数,包括对空值的操作方式等;
  •  上述数据透视表的结果中,无论是行中的两个key("F"和"M")还是列中的两个key(0和1),都是按照字典序排序的结果,这也呼应了Excel中关于数据透视表的介绍。

03 Spark实现数据透视表

Spark作为分布式的数据分析工具,其中spark.sql组件在功能上与Pandas极为相近,在某种程度上个人一直将其视为Pandas在大数据中的实现。在Spark中实现数据透视表的操作也相对容易,只是不如pandas中的自定义参数来得强大。

首先仍然给出在Spark中的构造数据:

而后,前面已分析过数据透视表的本质其实就是groupby操作+pivot,所以spark中刚好也就是运用这两个算子协同完成数据透视表的操作,最后再配合agg完成相应的聚合统计。完整的实现数据透视表及其结果如下:

当然,注意到这里仍然是保持了数据透视表结果中行key和列key的有序。

04 SQL中实现数据透视表

这一系列的文章中,一般都是将SQL排在首位进行介绍,但本文在介绍数据透视表时有意将其在SQL中的操作放在最后,这是因为在SQL中实现数据透视表是相对最为复杂的。实际上,SQL中原生并不支持数据透视表功能,只能通过衍生操作来曲线达成需求。

上述在分析数据透视表中,将其定性为groupby操作+行转列的pivot操作,那么在SQL中实现数据透视表就将需要groupby和行转列两项操作,所幸的是二者均可独立实现,简单组合即可。

仍然是在SQL中构造临时数据表,如下:

而后我们采取逐步拆解的方式尝试数据透视表的实现:

利用groupby实现分组聚合统计,这一操作非常简单:

对上述结果执行行转列,实现数据透视表。这里,SQL中实现行转列一般要配合case when,简单的也可以直接使用if else实现。由于这里要转的列字段只有0和1两种取值,所以直接使用if函数即可:

上述SQL语句中,仅对sex字段进行groupby操作,而后在执行count(name)聚合统计时,由直接count聚合调整为两个count条件聚合,即:

  •  如果survived字段=0,则对name计数,否则不计数(此处设置为null,因为count计数时会忽略null值),得到的结果记为survived=0的个数;
  •  如果survived字段=1,则对name计数,否则不计数,此时得到的结果记为survived=1的个数。

这样,得到的结果就是最终要实现的数据透视表需求。

值得指出,这里通过if条件函数来对name列是否有实际取值+count计数实现聚合,实际上还可以通过if条件函数衍生1或0+sum求和聚合实现,例如:

当然,二者的结果是一样的。

以上就是数据透视表在SQL、Pandas和Spark中的基本操作,应该讲都还是比较方便的,仅仅是在SQL中需要稍加使用个小技巧。希望能对大家有所帮助,如果觉得有用不妨点个在看! 

 

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

SQL、Pandas和Spark:如何实现数据透视表?

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

SQL、Pandas和Spark:如何实现数据透视表?

今天本文就围绕数据透视表,介绍一下其在SQL、Pandas和Spark中的基本操作与使用,这也是沿承这一系列的文章之一。

怎么使用Python+Pandas实现数据透视表

这篇文章主要介绍了怎么使用Python+Pandas实现数据透视表的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么使用Python+Pandas实现数据透视表文章都会有所收获,下面我们一起来看看吧。导入示例数
2023-07-02

Python如何实现数据透视表

这篇文章主要为大家展示了“Python如何实现数据透视表”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Python如何实现数据透视表”这篇文章吧。用Python里的Pandas可以实现,虽然感觉
2023-06-25

Oracle中如何实现数据透视表

这篇文章主要介绍Oracle中如何实现数据透视表,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!使用 CASE 表达式实现数据透视表数据透视表的本质就是按照行和列的不同组合进行数据分组,然后对结果进行汇总;因此,它和数
2023-06-14

Pandas数据透视的函数如何使用

这篇文章主要介绍了Pandas数据透视的函数如何使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Pandas数据透视的函数如何使用文章都会有所收获,下面我们一起来看看吧。pandas.melt()melt函数
2023-07-02

wps数据透视表如何做

这篇文章主要介绍“wps数据透视表如何做”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“wps数据透视表如何做”文章能帮助大家解决问题。用wps打开所需要设置的数据表格,并选择需要设置透视表的数据。
2023-07-01

access数据透视表如何做

要在Access中创建透视表,您可以按照以下步骤操作:1. 打开Access数据库并选择要在其上创建透视表的数据表。2. 在“创建”选项卡中,单击“查询设计”以打开查询设计视图。3. 在“查询设计”工具栏上,将表添加到查询设计视图中。4.
2023-10-11

excel数据透视表求和项如何设置

这篇文章主要介绍了excel数据透视表求和项如何设置的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇excel数据透视表求和项如何设置文章都会有所收获,下面我们一起来看看吧。excel数据转换成图表显示百分比:1
2023-07-02

MySQL/MariaDB怎么实现数据透视表

这篇文章将为大家详细讲解有关MySQL/MariaDB怎么实现数据透视表,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。使用 CASE 表达式和分组聚合数据透视表的本质就是按照行和列的不同组合进行数据分组,
2023-06-14

MySQL/MariaDB 如何实现数据透视表的示例代码

前文介绍了Oracle 中实现数据透视表的几种方法,今天我们来看看在 MySQL/MariaDB 中如何实现相同的功能。 本文使用的示例数据可以点此下载。 使用 CASE 表达式和分组聚合数据透视表的本质就是按照行和列的不同组合进行数据分组
2022-05-14

Excel数据透视表如何制作

制作Excel数据透视表的步骤如下:1. 打开Excel并导入数据。确保你的数据是以表格形式排列的,并且每一列都有合适的表头。2. 选择任意一个数据单元格,然后点击Excel菜单栏中的“插入”选项卡,然后选择“数据透视表”或“透视表”。3.
2023-10-07

SQL、Pandas和Spark:这个库,实现了三大数据分析工具的大一统

由于Spark是基于Scala语言实现的大数据组件,而Scala语言又是运行在JVM虚拟机上的,所以Spark自然依赖JDK,截止目前为止JDK8依然可用,而且几乎是安装各大数据组件时的首选。所以搭建pyspark环境首先需要安装JDK8,

如何使用Pandas和SQL分析数据

我们在本教程中将探讨何时以及如何将SQL功能整合到Pandas框架中,并探讨其局限性。

excel数据透视表行标签和列标签如何设置

本篇内容主要讲解“excel数据透视表行标签和列标签如何设置”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“excel数据透视表行标签和列标签如何设置”吧!1、首先,我们进入“插入”选择“数据透视
2023-07-02

Pandas如何实现分组数据

这篇文章给大家分享的是有关Pandas如何实现分组数据的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。分组数据这种操作在数据科学家和分析师的日常生活中经常执行。Pandas提供了一个基本的函数来执行数据分组,即Gr
2023-06-27

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录