pandas27 merge(数据库风格合并validate参数实例)( tcy)
# 实例5.1:validate检查重复键left = pd.DataFrame({'A' : [11,12], 'B' : [13, 13]})#B列重复数字right = pd.DataFrame({'A' : [14,15,16], 'B': [13,13,13]})#B列重复数字left1 = pd.DataFrame({'A' : [1...
·
# 实例5.1:validate检查重复键
left = pd.DataFrame({'A' : [11,12], 'B' : [13, 13]}) #B列重复数字
right = pd.DataFrame({'A' : [14,15,16], 'B': [13,13,13]}) #B列重复数字
left1 = pd.DataFrame({'A' : [11,12], 'B' : [13, 14]}) #B列无重复数字
right1 = pd.DataFrame({'A' : [14,15,16], 'B': [17,18,19]}) #B列无重复数字
left2 = pd.DataFrame({'A' : [11,12], 'B' : [13, 14]}) #B列无重复数字
right2 = pd.DataFrame({'A' : [14,15,16], 'B': [13,13,13]}) #B列重复数字
result=pd.merge(left, right, on='B', how='outer') #结果等价下面
result=pd.merge(left, right, on='B', how='outer', validate="m:m")
result1=pd.merge(left1, right1, on='B', how='outer')
result0 = pd.merge(left, right, on='B', how='outer',
validate="one_to_one") #错误:左侧和右侧B列都有重复值不是一对一合并
result2=pd.merge(left2, right2, on='B', how='outer',
validate="one_to_many") #左侧B列无重复值,右侧B列有重复值1:m
# left left1 left2
A B A B A B
0 11 13 0 11 13 0 11 13
1 12 13 1 12 14 1 12 14
# right right1 right2
A B A B A B
0 14 13 0 14 17 0 14 13
1 15 13 1 15 18 1 15 13
2 16 13 2 16 19 2 16 13
# result result1对比组 result2 1:m
A_x B A_y A_x B A_y A_x B A_y
0 11 13 14 0 11.0 13 NaN 0 11 13 14.0
1 11 13 15 1 12.0 14 NaN 1 11 13 15.0
2 11 13 16 2 NaN 17 14.0 2 11 13 16.0
3 12 13 14 3 NaN 18 15.0 3 12 14 NaN
4 12 13 15 4 NaN 19 16.0
5 12 13 16
#result1在列上有重复值导致返回数据数量是行维度的乘法,易导致内存溢出;
#在合并前应考虑重复值问题
# 实例5.2:正确应用 - 指定唯一值
left = pd.DataFrame({'no':[11,12,13],'name' : ['Tom','Jim','Jim'], 'age' : [13, 13,14]})
right = pd.DataFrame({'no' : [11,12,13], 'weight': [30,40,40]})
pd.merge(left, right, on='B', how='outer', validate="1:1")#no为唯一值
no name age weight
0 11 Tom 13 30
1 12 Jim 13 40
2 13 Jim 14 40
更多推荐
所有评论(0)