一.操作数据集的结构
首先是groupby
:
groupby
一般与agg
、apply
一起使用。
使用这些函数可以通过拆分一个或多个分类变量将数据拆分,然后分别在拆分以后的数据上进行需要的计算。
我们可以把上述过程理解为三部:
- 拆分数据
- 应用某个函数
- 汇总计算结果
分解步骤:
- 数据分组————groupby方法
- 数据聚合:
使用内置函数——sum/mean/max/min/count等
使用自定义函数——agg方法
自定义更丰富的分组计算——apply方法
groupby
使用实列如下:
df.groupby(df['year']).max()
agg
与apply
放到实列中解释啦。
合并数据集
数据集的合并(merge)或连接(join)运算是通过一个或多个键将行连接在一起的。
merge可根据一个或多个键将不同的DataFrame中的行连接在一起。例如:
import numpy as np
from pandas import Series,DataFrame
import pandas as pd
df1 = DataFrame({'key':['c','d','a','b','c',],'data1':range(5)})
df2 = DataFrame({'key':['a','b','c',],'data2':range(3)})
pd.merge(df1,df2)
结果如下:
key data1 data2
0 c 0 2
1 c 4 2
2 a 2 0
3 b 3 1
没有制定的话,merge会将重叠的列明当作键,所以一般显式指定:
pd.merge(df1,df2,on='key')
如果两个对象的列名不同,需要分别进行指定:
df3 = DataFrame({'lkey':['b','b','a','c','a','a','b'],'data1':range(7)})
df4 = DataFrame({'rkey':['a','b','c'],'data2':range(3)})
pd.merge(df3,df4,left_on='lkey',right_on='rkey')
结果如下:
lkey data1 rkey data2
0 b 0 b 1
1 b 1 b 1
2 b 6 b 1
3 a 2 a 0
4 a 4 a 0
5 a 5 a 0
6 c 3 c 2
默认情况下,merge做的是inner
连接,即结果中的键是交集。
连接方式可以通过使用参数how
来指定,其中还包括left
,right
,outer
。
下面是外连接求取的是键的并集:
pd.merge(df1,df2,on='key',how='outer')
结果如下:
key data1 data2
0 c 0 2.000
1 c 4 2.000
2 d 1 nan
3 a 2 0.000
4 b 3 1.000
使用left
产生的是行的笛卡儿积:
df1 = DataFrame({'key':['b','b','a','c','a','b'],'data1':range(6)})
df2 = DataFrame({'key':['a','b','a','b','d'],'data2':range(5)})
pd.merge(df1,df2,on='key',how='left')
结果如下:
key data1 data2
0 b 0 1.000
1 b 0 3.000
2 b 1 1.000
3 b 1 3.000
4 a 2 0.000
5 a 2 2.000
6 c 3 nan
7 a 4 0.000
8 a 4 2.000
9 b 5 1.000
10 b 5 3.000
科普一下什么是笛卡儿积:
在数学中,两个集合和的笛卡儿积,又称直积,在集合论中表示为,是所有可能的有序对组成的集合,其中有序对的第一个对象是的成员,第二个对象是的成员。 。 举个实例,如果集合是13个元素的点数集合,而集合是4个元素的花色集合♠, ♥, ♦, ♣,则这两个集合的笛卡儿积是有52个元素的标准扑克牌的集合。
笛卡儿积
右连接与左连接类似,不同的是在于取哪一个数据集作为标准。
同时数据集的合并可用使用函数append
和concat
。