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()