对比Excel-Python数据分析——数据分组(透视)、多表拼接(5)

1. 数据分组/数据透视表

1.1 数据分组

在Python中,我们用groupby()函数实现。
在这里插入图片描述

1.11 分组键是列名

聚合:对分组后的数据进行汇总运算的操作统称聚合,该篇中的3.2节中提到的函数均是聚合函数。
1.按照一列进行分组
在这里插入图片描述
2.按照一列进行分组
在这里插入图片描述
3.对某列/些列按某一原则分组
比如我们想看下A,B,C类客户分别有多少
在这里插入图片描述

1.12 分组键是Series(常用)

在这里插入图片描述

1.13 神奇的aggregate方法

aggregate()第二个特性常用
在这里插入图片描述

1.14 对分组后的结果重置索引

在这里插入图片描述

1.2 数据透视表

在python中实现用pivot_table()函数,数据分组与数据透视表类似,区别如下:

  • 数据分组只在一维(行)方向上不断拆分
  • 数据透视表是在行、列方向上同时拆分。
  • 为了后续分析,两者均需对结果重置索引reset_index()
    在这里插入图片描述
    在这里插入图片描述

pivot_table()函数参数如下:

pivot_table(data,values=None,index=None,columns=None,aggfunc='mean',
fill_value=None,margins=False,dropna=True,margins_name='All')

data:数据透视表
values对应excel中值的那个框
index对应excel中行的那个框
columns对应excel中列的那个框
aggfunc表示对values的计算类型
fill_value表示对空值的填充值
margins表示是否显示合计划
dropna表示是否删除缺失,若为真,则把一整行全作为缺失值删除
margins_name表示合计列的列名

例1 简单示例
在这里插入图片描述
例2 对两列采用不同的聚合
在这里插入图片描述

2. 多表拼接

2.1 表的横向拼接

连接表的类型关注的就是待连接的两个表都是什么类型,主要有3种情况:一对一、一对多、多对多,需用merge()函数。

2.11 连接表的类型

2.111 一对一

待连接的两个表的公共列是一对一的。
在这里插入图片描述

2.112 多对一

多对一就是待连接的两个表的公共列不是一对一的,其中一个表的公共列有重复值,另一个表的公共列是唯一的。
在这里插入图片描述

2.113 多对多

多对多就是待连接的两个表的公共列不是一对一的,且两个表中的公共列都有重复值,多对多连接相当于多个一对一连接。
在这里插入图片描述

2.12 连接键的类型(常用)

pd.merge()默认以公共列作为连接键,也可以用键指定连接方式。

  • 1.on指定连接键,on是指的两个表的公共列,效果跟上面的一样。
  • 2.left_on/right_on 当两个表没有公共键时,left_on用来指明左表用作连接键的列名,right_on用来指明右表用作连接键的列名。
  • 3.索引列连接(索引列不是真正的列),left_index,right_index控制左右表的索引。
  • 4.索引和普通列混合使用

方式二
在这里插入图片描述
方式三
在这里插入图片描述
方式四
在这里插入图片描述

2.13连接方式(常用)

在实际应用中,两个连接表可能会存在互相找不到公共列的某些值,这时候需要下面连接方式:

  • inner:内连接就是取两个表的公共部分(默认此方式)
  • left:左连接就以左表为基础,右表往左表上拼接,拼过来的信息就用NAN填充。
  • right:右连接就以右表为基础,左表往右表上拼接,拼过来的信息就用NAN填充。
  • outer:外连接就是取两个表的并集。

2.14 重复列名处理(常用)

两个表在进行连接时,经常遇到列名重复的情况,我们只需要调整参数即可。
在这里插入图片描述

2.2 表的纵向拼接

横向拼接时两个表根据公共列在水平方向上进行拼接,纵向拼接是在垂直方向上进行拼接。一般的应用场景就是将分离的若干个结构相同的数据表合成一个数据标配,使用pd.concat()函数。

2.21 普通合并

普通合并就是直接将带合并的表名以列表的形式传给pd.concat().
在这里插入图片描述

2.22 索引设置

上面的方式合并后的索引是12341234,这样处理数据不方便,可以使用下面的生成一组新的索引。

pd.concat([df1,df2],ignore_index=True)

2.23 重叠数据合并

当df1和df2中的数据有交叉时,即df1中有某些df2中的数据,df2中有某些df1中的数据,处理方式如下:

pd.concat([df1,df2],ignore_index=True).drop_duplicates()
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值