1, 合并数据集
, 多对一合并
我们需要用到 pandas 中的 merge 函数, merge 函数默认情况下合并的是两个数据集的交集 (inner 连接), 当然还有其他的参数:
how 里面有 inner,outer,left,right, 四个参数可以选择, 分别代表: 交集, 并集, 参与合并的左侧 DataFrame, 以及右侧
当列名对象相同时:
- df1=pd.DataFrame({'key':['a','c','a','b','a','c','b','c'],'data1':range(8)})
- df2=pd.DataFrame({'key':['a','b','d'],'data2':range(3)})
- pd.merge(df1,df2,on='key')
返回
- key data1 data2
- 0 a 0 0
- 1 a 2 0
- 2 a 4 0
- 3 b 3 1
- 4 b 6 1
当列名对象不同时:
- df1=pd.DataFrame({'lkey':['a','c','a','b','a','c','b','c'],'data1':range(8)})
- df2=pd.DataFrame({'rkey':['a','b','d'],'data2':range(3)})
- pd.merge(df1,df2,left_on='lkey',right_on='rkey',how='outer')
返回为
- lkey data1 rkey data2
- 0 a 0.0 a 0.0
- 1 a 2.0 a 0.0
- 2 a 4.0 a 0.0
- 3 c 1.0 NaN NaN
- 4 c 5.0 NaN NaN
- 5 c 7.0 NaN NaN
- 6 b 3.0 b 1.0
- 7 b 6.0 b 1.0
- 8 NaN NaN d 2.0
, 多对多合并
- df1=pd.DataFrame({'key':['b','c','b','a','b','a'],'data1':range(6)})
- df2=pd.DataFrame({'key':['a','a','c','b','d'],'data2':range(5)})
- pd.merge(df1,df2,on='key',how='right')
返回为
- key data1 data2
- 0 b 0.0 3
- 1 b 2.0 3
- 2 b 4.0 3
- 3 c 1.0 2
- 4 a 3.0 0
- 5 a 5.0 0
- 6 a 3.0 1
- 7 a 5.0 1
- 8 d NaN 4
多对多合并产生的是行的笛卡尔积, 即 df1 有 2 个 a,df2 有 2 个 a, 并集会产生 4 个 a
当需要根据多个键进行合并时, 只要传入一个列名组成的列表就可以.
在合并运算时, 需要对重复列名的处理, suffixes 函数可以指定附加到左右两个 DataFrame 对象的重复列名上的字符串
2, 索引上的合并
来源: http://www.bubuko.com/infodetail-2752259.html