前言
学习
聚合的意思指的是对数据框架中某一类型的数据进行整合,在整合后可以对其进行求和、求平均值等操作,下面举例说明:
对上面创建的数据框架按公司进行分类,求各公司的人均销售额:
再来统计一下各公司出现的次数:
请注意,在用
上述的输出结果中,有各公司出现的次数、销售额的均值、均方差、最小最大值等等,如果觉得这样的排列看起来不好看,还可以将其转置:
或者只看一个公司的纵览:
数据框架的级联(
为了说明数据集的级联,我们考虑这样一种情况,某公司派出一些数据采集人员对某个地区的某些产品进行满意度调查,比如调查
现需要将这些数据合在一起进行分析,这种情况下就要用到数据集的
从上述输出结果来看,整合数据的任务完成了,这种级联的方案属于按列级联,相应地,肯定还有一种按行级联,此时需要添加参数
从上述结果来看,当按行级联时,由于在每个数据框架中,我们为其指定的数据的合并(
如果熟悉
我们也可以根据多个关键列合并,比如:
请注意,观察上述结果,我们可以发现,
当以联合(
当两个数据框架中的
上面给出了
Pandas
的最好方式就是多用它,只有在实际中多用,才能更好地掌握其中的技巧,这一次我们从数据的聚合来开始。
GroupBy
的使用
聚合的意思指的是对数据框架中某一类型的数据进行整合,在整合后可以对其进行求和、求平均值等操作,下面举例说明:
![f0a696fcfdfc5ba793b16c3d3b9317c5.png](https://img-blog.csdnimg.cn/img_convert/f0a696fcfdfc5ba793b16c3d3b9317c5.png)
![49b09af707d9fc8e4d5a5578fc1e1dde.png](https://img-blog.csdnimg.cn/img_convert/49b09af707d9fc8e4d5a5578fc1e1dde.png)
![b9d371b7eb043fa01ad5e69a89ea647a.png](https://img-blog.csdnimg.cn/img_convert/b9d371b7eb043fa01ad5e69a89ea647a.png)
count
统计的时候,groupby
是按哪列分组,则统计的就是哪列中不同类别的个数。
在Pandas
中,有一个函数.describe()
,它通常用来给出一个数据框架的纵览,比如:
![4d307a886cdee4898509c8218d3be5c9.png](https://img-blog.csdnimg.cn/img_convert/4d307a886cdee4898509c8218d3be5c9.png)
![13ea5bdf7b78c8395b267d1246fc67ee.png](https://img-blog.csdnimg.cn/img_convert/13ea5bdf7b78c8395b267d1246fc67ee.png)
![245847ec5751f26170e5b6db24157d5a.png](https://img-blog.csdnimg.cn/img_convert/245847ec5751f26170e5b6db24157d5a.png)
数据框架的级联(concatenation
)
为了说明数据集的级联,我们考虑这样一种情况,某公司派出一些数据采集人员对某个地区的某些产品进行满意度调查,比如调查A
、B
、C
、D
四种产品,分别得到的数据如下:
![bde4d9cdbf0b01c5eaae853c84b21f50.png](https://img-blog.csdnimg.cn/img_convert/bde4d9cdbf0b01c5eaae853c84b21f50.png)
级联
概念。在Pandas
中,用.concat()
来完成数据集的级联:
![a66bd6bc61fff7cebffd29263b9fd687.png](https://img-blog.csdnimg.cn/img_convert/a66bd6bc61fff7cebffd29263b9fd687.png)
axis=1
:
![def4f748a4cdfa008c4407aa339d5388.png](https://img-blog.csdnimg.cn/img_convert/def4f748a4cdfa008c4407aa339d5388.png)
index
都不重合,因此,级联的结果中,不同框架中缺少数据的部分,都是用NaN
来填充,如果还记得上一节中fillnan
函数,那么一定记得它也有一个参数axis=1
设置为填充行时的情况。也就是说,在DataFrame
中,如果一个函数对行列均有效果时,其默认情况都是对列操作的。
上述的级联中,我们之所有产生了那么多缺失值,是由于各数据的index
不重合,如果有重合的情况会怎么样呢?
数据的合并(merge
)
如果熟悉SQL
语言的同学肯定对数据表的合并不陌生,在pandas
中,主要是通过pd.merge
函数来进行的,它的语法是这样的:
pd.merge(leftdata, rightdata, how='inner', on='Key')
上述语法中的
leftdata
指的是应该显示在左侧的数据框架,
rightdata
当然是指显示在右侧的数据框架,关于
how
的方式,我们下来将举例细说,
on
当然是指两个数据集要合并时所具备的关键列:
![499d9dc87d99f94b7a258cd969cc6289.png](https://img-blog.csdnimg.cn/img_convert/499d9dc87d99f94b7a258cd969cc6289.png)
![43aec333ec29429f16aedf47fa22e1b0.png](https://img-blog.csdnimg.cn/img_convert/43aec333ec29429f16aedf47fa22e1b0.png)
leftdata
中的key1
、key2
组合[k0,k0]
和[k1,k0]
与rightdata
中的关键列有重合,其中[k1,k0]
在rightdata
中对应两组数据,因此,当以inner
方式合并时,它们就逐一匹配合并在一起。
下面我们来看一下how=outer
时的合并方式:
![cc420b0b4caa3849a621fcf0f55fb2fd.png](https://img-blog.csdnimg.cn/img_convert/cc420b0b4caa3849a621fcf0f55fb2fd.png)
outer
的方式合并时,结果中将包含两个数据框架对应的关键列中所有组合,对没有该组合对应的框架中的数据,在结果中将以NaN
来填充。
综上可知,inner
合并,指的是求两个数据框架对应关键列的交集,而outer
合并,则是两个数据框架对应关键列的并集。
Merge
是对两个数据框架有共同列的进行合并,但在级联
部分的最后,我们还提到如果index
有共同部分时该怎样处置的问题,下面给出该问题的解决方案。
联合(join
)
当两个数据框架中的index
有重合部分时,想要合并两部分数据,则需要用到join
方法:
![19c9dc1e24e49fdfda6f81b722970306.png](https://img-blog.csdnimg.cn/img_convert/19c9dc1e24e49fdfda6f81b722970306.png)
![ea4cd9d7ae6b7dba4fc3664942364071.png](https://img-blog.csdnimg.cn/img_convert/ea4cd9d7ae6b7dba4fc3664942364071.png)
join
的四种联合方法,inner
和outer
分别是求index
的交集和并集,left
是以左数据的index
为基准,而right
则是以右数据的index
为基准。
由此推断,merge
的参数how
也有同样的left
和right
,请同学们测试。
小结
本文首先对groupby
的分组聚合方式进行了研究,之后对于两个数据框架的级联关系进行了探索。从结果来看,级联事实上分三类,一是用concat
进行操作,它可以对多个数据框架进行级联,二是用merge
进行数据合并,它可以对有重合列名的两部分数据进行合并,三是用join
方式,它可以对index
有重合的部分进行数据拼接。