2018.03.27 python pandas merge join 使用
#2.16 合并 merge-join
import numpy as np
import pandas as pd
df1 = pd.DataFrame({'key1':['k0','k1','k2','k3'],
'A':['A0','A1','A2','A3'],
'B':['B0','B1','B2','B3']})
df2 = pd.DataFrame({'key1':['k0','k1','k2','k3'],
'C':['C0','C1','C2','C3'],
'D':['D0','D1','D2','D3']})
df3 = pd.DataFrame({'key1':['k0','k1','k2','k3'],
'key2':['k0','k1','k0','k1'],
'A':['A0','A1','A2','A3'],
'B':['B0','B1','B2','B3']})
df4 = pd.DataFrame({'key1':['k0','k1','k2','k3'],
'key2':['k0','k1','k0','k3'],
'C':['C0','C1','C2','C3'],
'D':['D0','D1','D2','D3']})
print(df1)
print(df2)
print(pd.merge(df1,df2,on='key1'))
print('------')
#on 参考键 print(df3)
print(df4)
print(pd.merge(df3,df4,on=['key1','key2']))#2个键值同时去匹配
结果:
A B key1
0 A0 B0 k0
1 A1 B1 k1
2 A2 B2 k2
3 A3 B3 k3
C D key1
0 C0 D0 k0
1 C1 D1 k1
2 C2 D2 k2
3 C3 D3 k3
A B key1 C D
0 A0 B0 k0 C0 D0
1 A1 B1 k1 C1 D1
2 A2 B2 k2 C2 D2
3 A3 B3 k3 C3 D3
------
A B key1 key2
0 A0 B0 k0 k0
1 A1 B1 k1 k1
2 A2 B2 k2 k0
3 A3 B3 k3 k1
C D key1 key2
0 C0 D0 k0 k0
1 C1 D1 k1 k1
2 C2 D2 k2 k0
3 C3 D3 k3 k3
A B key1 key2 C D
0 A0 B0 k0 k0 C0 D0
1 A1 B1 k1 k1 C1 D1
2 A2 B2 k2 k0 C2 D2
#参数how 合并方式
print(pd.merge(df3,df4,on=['key1','key2'],how='inner'))#取交集
print(pd.merge(df3,df4,on=['key1','key2'],how='outer'))#并集 数据缺失用Nan
print(pd.merge(df3,df4,on=['key1','key2'],how='left'))#按照df3为参考,数据缺失用Nan
print(pd.merge(df3,df4,on=['key1','key2'],how='right'))#按照df4为参考,数据缺失用Nan
结果:
A B key1 key2 C D
0 A0 B0 k0 k0 C0 D0
1 A1 B1 k1 k1 C1 D1
2 A2 B2 k2 k0 C2 D2
A B key1 key2 C D
0 A0 B0 k0 k0 C0 D0
1 A1 B1 k1 k1 C1 D1
2 A2 B2 k2 k0 C2 D2
3 A3 B3 k3 k1 NaN NaN
4 NaN NaN k3 k3 C3 D3
A B key1 key2 C D
0 A0 B0 k0 k0 C0 D0
1 A1 B1 k1 k1 C1 D1
2 A2 B2 k2 k0 C2 D2
3 A3 B3 k3 k1 NaN NaN
A B key1 key2 C D
0 A0 B0 k0 k0 C0 D0
1 A1 B1 k1 k1 C1 D1
2 A2 B2 k2 k0 C2 D2
3 NaN NaN k3 k3 C3 D3
#参数left_on right_on left_index right_index -》当键不在一个列时,可以单独设置左键或右键
df1 = pd.DataFrame({'key':list('abdcjeu'),
'data1':range(7)})
df2 = pd.DataFrame({'rkey':list('abc'),
'data2':range(3)})
print(df1,'\n',df2)
print(pd.merge(df1,df2,left_on = 'key',right_on = 'rkey'))#当2个dataframe中的主键名称不一致时,用left_on 和right_on 去指定键值
结果:
data1 key
0 0 a
1 1 b
2 2 d
3 3 c
4 4 j
5 5 e
6 6 u
data2 rkey
0 0 a
1 1 b
2 2 c
data1 key data2 rkey
0 0 a 0 a
1 1 b 1 b
2 3 c 2 c
df1 = pd.DataFrame({'key':list('abdcjeu'),
'data1':range(7)})
df2 = pd.DataFrame({'data2':range(100,105)},index = list('abcde'))
print(df1)
print(df2)
print(pd.merge(df1,df2,left_on='key',right_index=True,sort=True))#以index为键 作为左表 key对应的键值对 sort是否按照key排序
data1 key
0 0 a
1 1 b
2 2 d
3 3 c
4 4 j
5 5 e
6 6 u
data2
a 100
b 101
c 102
d 103
e 104
data1 key data2
0 0 a 100
1 1 b 101
3 3 c 102
2 2 d 103
5 5 e 104
#pd.join 直接通过索引链接
left = pd.DataFrame({'A':['A0','A1','A2','A3'],
'B':['B0','B1','B2','B3']},
index = ['k0','k1','k2','k4'])
right = pd.DataFrame({'C':['C0','C1','C2','C3'],
'D':['D0','D1','D2','D3']},
index = ['k0','k1','k2','k3'])
print(left)
print(right)
print(left.join(right))
print(left.join(right,how='outer'))#拓展
结果:
A B
k0 A0 B0
k1 A1 B1
k2 A2 B2
k4 A3 B3
C D
k0 C0 D0
k1 C1 D1
k2 C2 D2
k3 C3 D3
A B C D
k0 A0 B0 C0 D0
k1 A1 B1 C1 D1
k2 A2 B2 C2 D2
k4 A3 B3 NaN NaN
A B C D
k0 A0 B0 C0 D0
k1 A1 B1 C1 D1
k2 A2 B2 C2 D2
k3 NaN NaN C3 D3
k4 A3 B3 NaN NaN
df1 = pd.DataFrame({'key':list('bbacaab'),
'data1':range(7)})
df2 = pd.DataFrame({'key':list('abc'),
'data2':range(3)})
print(pd.merge(df1,df2,left_index=True,right_index=True,suffixes=('_1','_2')))
print(df1.join(df2['data2']))
print('------')#当df1 df2的key相同时,使用suffixes 两个相同的key 成为 key_1 key_2
结果:
data1 key_1 data2 key_2
0 0 b 0 a
1 1 b 1 b
2 2 a 2 c
data1 key data2
0 0 b 0.0
1 1 b 1.0
2 2 a 2.0
3 3 c NaN
4 4 a NaN
5 5 a NaN
6 6 b NaN
left = pd.DataFrame({'A':['A0','A1','A2','A3'],
'B':['B0','B1','B2','B3'],
'key':['k0','k1','k0','k3']})
right = pd.DataFrame({'C':['C0','C1'],
'D':['D0','D1']},
index = ['k0','k1'])
print(left)
print(right)
print(left.join(right,on='key'))#用left的key和 right的index 合并
结果:
A B key
0 A0 B0 k0
1 A1 B1 k1
2 A2 B2 k0
3 A3 B3 k3
C D
k0 C0 D0
k1 C1 D1
A B key C D
0 A0 B0 k0 C0 D0
1 A1 B1 k1 C1 D1
2 A2 B2 k0 C0 D0
3 A3 B3 k3 NaN NaN
2018.03.27 python pandas merge join 使用的更多相关文章
- Python Pandas Merge, join and concatenate
Pandas提供了基于 series, DataFrame 和panel对象集合的连接/合并操作. Concatenating objects 先来看例子: from pandas import Se ...
- 【VSCode】Windows下VSCode编译调试c/c++【更新 2018.03.27】
--------– 2018.03.27 更新--------- 便携版已更新,点此获取便携版 已知BUG:中文目录无法正常调试 用于cpptools 0.15.0插件的配置文件更新 新的launch ...
- Pandas -- Merge,join and concatenate
Merge, join, and concatenate pandas provides various facilities for easily combining together Series ...
- 2018.03.27 pandas concat 和 combin_first使用
# 连接和修补concat.combine_first 沿轴的堆叠连接 # 连接concatimport pandas as pdimport numpy as np s1 = pd.Series([ ...
- 2018.03.27 pandas duplicated 和 replace 使用
#.duplicated / .replace import numpy as np import pandas as pd s = pd.Series([1,1,1,1,1,2,3,3,3,4,4, ...
- 2018/03/27 每日一个Linux命令 之 cron
Cron 用于配置定时任务. -- 环境为 Ubuntu16-04 -- 先说说怎么配置一个简单的定时任务.直观的可以看到效果. 之前在网上查找资料,对Shell编程不熟悉的实在是很头疼,走了不少弯路 ...
- Python pandas merge不能根据列名合并两个数据框(Key Error)?
目录 折腾 解决方法 折腾 数据分析用惯了R,感觉pandas用起来就有点反人类了.今天用python的pandas处理数据时两个数据框硬是合并不起来. 我有两个数据框,列名是未知的,只能知道索引,以 ...
- 2018.4.27 python使用过的第三方库
Flask flask-login flask-sqlalchemy flask-mail psutil lvm2py oss2 python-ldap pyudev pyOpenSSL urllib ...
- 网易2018.03.27算法岗,三道编程题100%样例AC题解
博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~http://www.cnblogs.com/chenxiwenruo/p/8660814.html特别不喜欢那些随便转载别人的原创文章又不给 ...
随机推荐
- host.conf - 解析配置文件
DESCRIPTION (描述) 文件 /etc/host.conf 包含了为解析库声明的配置信息. 它应该每行含一个配置关键字, 其后跟着合适的配置信息. 系统识别的关键字有: order, tri ...
- DedeCms织梦发布文章时输入Tag标签逗号自动变成英文标点的方法
把TAG标签的间隔号由空格改为英文的逗号,这样使得经常原创文章的站长朋友非常不方便,因为我们输入汉字时总是喜欢使用全角的逗号,那么有没有办法使用 js脚本把输入的中文逗号变成英文逗号呢?当然是可以的! ...
- kloxo增加了域名,怎么不能访问?如何重启web服务?
kloxo增加了域名,怎么不能访问?这是因为需要重新启动web服务. 有时候网站打不开,也可以尝试重启web服务. 重启web服务方法: 登录kloxo后台-->左边栏:服务器linux --& ...
- No application found. Either work inside a view function or push an application context.
flask报了这个错,字面意思是说没有应用上下文,字面给的解决意见是要么放置在一个视图内,要么提供一个应用(flask)上下文. 查看文档发现文档给了个解决方案: 一个是通过app.app_conte ...
- python 控制流(二)
常用控制流 条件语句 循环语句 一.条件语句 if 条件表达式: #条件表达式--->比较运算符--->布尔值 满足条件表达式执行的代码块 #当布尔值为 True时执行此句 elif 条件 ...
- Linux中关闭SSH的DNS解析
在操作中,我们都会用SSH协议来远程控制虚拟机,但是在输入用户名时候,会有一段时间的卡顿,此时正在进行SSH协议的DNS解析,我们为了快速的连接到虚拟机上,就要关闭这个解析过程,如下是具体配置: 1. ...
- 清华集训2014 sum
清华集训2014sum 求\[∑_{i=1}^{n}(-1)^{⌊i√r⌋}\] 多组询问,\(n\leq 10^9,t\leq 10^4, r\leq 10^4\). 吼题解啊 具体已经讲得很详细了 ...
- error C2280: 尝试引用已删除的函数
#include<unordered_map> struct SceneData { unordered_map<CString, CString> mConversation ...
- python 习题
文件内容为一个多层元组,遍历该元组,当全为数字时输出数字之和,全为字母输出字符串,有数字有字母输出False,并将该内容写入到该文件的下一行中 # 方法一: t1= ((1,2,3),("a ...
- javax.validation.UnexpectedTypeException: HV000030: No validator could be found for constraint,NotBlank判断不能为空
java 验证出现如下错误: javax.validation.UnexpectedTypeException: HV000030: No validator could be found for c ...