pandas merge on_Pandas学习笔记(三)

前言 学习Pandas的最好方式就是多用它,只有在实际中多用,才能更好地掌握其中的技巧,这一次我们从数据的聚合来开始。

GroupBy的使用

聚合的意思指的是对数据框架中某一类型的数据进行整合,在整合后可以对其进行求和、求平均值等操作,下面举例说明: f0a696fcfdfc5ba793b16c3d3b9317c5.png 对上面创建的数据框架按公司进行分类,求各公司的人均销售额: 49b09af707d9fc8e4d5a5578fc1e1dde.png 再来统计一下各公司出现的次数: b9d371b7eb043fa01ad5e69a89ea647a.png 请注意,在用count统计的时候,groupby是按哪列分组,则统计的就是哪列中不同类别的个数。 在Pandas中,有一个函数.describe(),它通常用来给出一个数据框架的纵览,比如: 4d307a886cdee4898509c8218d3be5c9.png 上述的输出结果中,有各公司出现的次数、销售额的均值、均方差、最小最大值等等,如果觉得这样的排列看起来不好看,还可以将其转置: 13ea5bdf7b78c8395b267d1246fc67ee.png 或者只看一个公司的纵览: 245847ec5751f26170e5b6db24157d5a.png

数据框架的级联(concatenation)

为了说明数据集的级联,我们考虑这样一种情况,某公司派出一些数据采集人员对某个地区的某些产品进行满意度调查,比如调查ABCD四种产品,分别得到的数据如下: bde4d9cdbf0b01c5eaae853c84b21f50.png 现需要将这些数据合在一起进行分析,这种情况下就要用到数据集的级联概念。在Pandas中,用.concat()来完成数据集的级联: a66bd6bc61fff7cebffd29263b9fd687.png 从上述输出结果来看,整合数据的任务完成了,这种级联的方案属于按列级联,相应地,肯定还有一种按行级联,此时需要添加参数axis=1def4f748a4cdfa008c4407aa339d5388.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 我们也可以根据多个关键列合并,比如: 43aec333ec29429f16aedf47fa22e1b0.png 请注意,观察上述结果,我们可以发现,leftdata中的key1key2组合[k0,k0][k1,k0]rightdata中的关键列有重合,其中[k1,k0]rightdata中对应两组数据,因此,当以inner方式合并时,它们就逐一匹配合并在一起。 下面我们来看一下how=outer时的合并方式: cc420b0b4caa3849a621fcf0f55fb2fd.png 当以outer的方式合并时,结果中将包含两个数据框架对应的关键列中所有组合,对没有该组合对应的框架中的数据,在结果中将以NaN来填充。
综上可知,inner合并,指的是求两个数据框架对应关键列的交集,而outer合并,则是两个数据框架对应关键列的并集。
Merge 是对两个数据框架有共同列的进行合并,但在级联部分的最后,我们还提到如果index有共同部分时该怎样处置的问题,下面给出该问题的解决方案。

联合(join)

当两个数据框架中的index有重合部分时,想要合并两部分数据,则需要用到join方法: 19c9dc1e24e49fdfda6f81b722970306.png ea4cd9d7ae6b7dba4fc3664942364071.png 上面给出了join的四种联合方法,innerouter分别是求index的交集和并集,left是以左数据的index为基准,而right则是以右数据的index为基准。 由此推断,merge的参数how也有同样的leftright,请同学们测试。

小结

本文首先对groupby的分组聚合方式进行了研究,之后对于两个数据框架的级联关系进行了探索。从结果来看,级联事实上分三类,一是用concat进行操作,它可以对多个数据框架进行级联,二是用merge进行数据合并,它可以对有重合列名的两部分数据进行合并,三是用join方式,它可以对index有重合的部分进行数据拼接。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
pandas.merge_ordered()函数pandas中将数据进行合并的函数,用于按照有序的方式将两个DataFrame对象进行合并,类似于SQL中的ORDER BY。merge_ordered()函数的基本语法为: ```python pd.merge_ordered(left, right, on=None, left_on=None, right_on=None, left_index=False, right_index=False, fill_method=None, suffixes=('_x', '_y'), how='outer') ``` 参数说明: - left:左侧DataFrame对象; - right:右侧DataFrame对象; - on:连接所根据的或者索引级别名称,必须在左侧和右侧DataFrame对象中存在; - left_on:左侧DataFrame对象中用作连接键的; - right_on:右侧DataFrame对象中用作连接键的; - left_index:如果为True,则使用左侧DataFrame对象中的索引作为连接键; - right_index:如果为True,则使用右侧DataFrame对象中的索引作为连接键; - fill_method:用于指定缺失值的填充方法; - suffixes:用于追加到重叠名的字符串; - how:连接方式,取值为'left','right','outer','inner'。 使用示例: ```python import pandas as pd df1 = pd.DataFrame({'key': ['A', 'B', 'C', 'D'], 'value': [1, 2, 3, 4]}) df2 = pd.DataFrame({'key': ['B', 'D', 'E', 'F'], 'value': [5, 6, 7, 8]}) # 按照key进行合并 result = pd.merge_ordered(df1, df2, on='key') print(result) # 按照key进行左连接 result_left = pd.merge_ordered(df1, df2, on='key', how='left') print(result_left) # 按照key进行右连接 result_right = pd.merge_ordered(df1, df2, on='key', how='right') print(result_right) # 按照key进行外连接 result_outer = pd.merge_ordered(df1, df2, on='key', how='outer') print(result_outer) ``` 输出结果: ```python key value_x value_y 0 A 1.0 NaN 1 B 2.0 5.0 2 C 3.0 NaN 3 D 4.0 6.0 4 E NaN 7.0 5 F NaN 8.0 key value_x value_y 0 A 1.0 NaN 1 B 2.0 5.0 2 C 3.0 NaN 3 D 4.0 6.0 key value_x value_y 0 B 2.0 5 1 D 4.0 6 2 E NaN 7 3 F NaN 8 key value_x value_y 0 A 1.0 NaN 1 B 2.0 5.0 2 C 3.0 NaN 3 D 4.0 6.0 4 E NaN 7.0 5 F NaN 8.0 ``` 以上就是pandas.merge_ordered()函数的基本用法和示例。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值