網(wǎng)站首頁 編程語言 正文
一、merge(合并)的語法:
pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=True, suffixes=('_x', '_y'), copy=True, indicator=False, validate=None)
參數(shù)介紹:
left,right:要merge的dataframe或者有name的Series
how:join類型,'left', 'right', 'outer', 'inner'
on:join的key,left和right都需要有這個key
left_on:left的df或者series的key
right_on:right的df或者seires的key
left_index,right_index:使用index而不是普通的column做join
suffixes:兩個元素的后綴,如果列有重名,自動添加后綴,默認是('_x', '_y')
二、以關(guān)鍵列來合并兩個dataframe
可以看到只有l(wèi)eft和right的key1=y的行保留了下來,即默認合并后只保留有共同列項并且值相等行(即交集)。
本例中l(wèi)eft和right的k1=y分別有2個,最終構(gòu)成了2*2=4行
import pandas as pd
left = pd.DataFrame({'A': ['a0', 'a1', 'a2', 'a3'],
'B': ['b0', 'b1', 'b2', 'b3'],
'k1': ['x', 'x', 'y', 'y']})
right = pd.DataFrame({'C': ['c1', 'c2', 'c3', 'c4'],
'D': ['d1', 'd2', 'd3', 'd4'],
'k1': ['y', 'y', 'z', 'z']})
left
right
pd.merge(left, right, on=‘k1’)
三、理解merge時數(shù)量的對齊關(guān)系
one-to-one:一對一關(guān)系,關(guān)聯(lián)的key都是唯一的
?? ?比如(學(xué)號,姓名) merge (學(xué)號,年齡)
?? ?結(jié)果條數(shù)為:1*1
one-to-many:一對多關(guān)系,左邊唯一key,右邊不唯一key
?? ?比如(學(xué)號,姓名) merge (學(xué)號,[語文成績、數(shù)學(xué)成績、英語成績])
?? ?結(jié)果條數(shù)為:1*N
many-to-many:多對多關(guān)系,左邊右邊都不是唯一的
?? ?比如(學(xué)號,[語文成績、數(shù)學(xué)成績、英語成績]) merge (學(xué)號,[籃球、足球、乒乓球])
?? ?結(jié)果條數(shù)為:M*N
1、one-to-one 一對一關(guān)系的merge
left = pd.DataFrame({'sno': [11, 12, 13, 14],
'name': ['name_a', 'name_b', 'name_c', 'name_d']
})
right = pd.DataFrame({'sno': [11, 12, 13, 14],
'age': ['21', '22', '23', '24']
})
left
right
# 一對一關(guān)系,結(jié)果中有4條
pd.merge(left, right, on='sno')
2、one-to-many 一對多關(guān)系的merge
注意:數(shù)據(jù)會被復(fù)制
left = pd.DataFrame({'sno': [11, 12, 13, 14],
'name': ['name_a', 'name_b', 'name_c', 'name_d']
})
right = pd.DataFrame({'sno': [11, 11, 11, 12, 12, 13],
'grade': ['語文88', '數(shù)學(xué)90', '英語75','語文66', '數(shù)學(xué)55', '英語29']
})
left
right
# 數(shù)目以多的一邊為準
pd.merge(left, right, on='sno')
3、many-to-many 多對多關(guān)系的merge
注意:結(jié)果數(shù)量會出現(xiàn)乘法
left = pd.DataFrame({'sno': [11, 11, 12, 12,12],
'愛好': ['籃球', '羽毛球', '乒乓球', '籃球', "足球"]
})
right = pd.DataFrame({'sno': [11, 11, 11, 12, 12, 13],
'grade': ['語文88', '數(shù)學(xué)90', '英語75','語文66', '數(shù)學(xué)55', '英語29']
})
left
right
pd.merge(left, right, on=‘sno’)
四、理解left join、right join、inner join、outer join的區(qū)別
left = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],
'A': ['A0', 'A1', 'A2', 'A3'],
'B': ['B0', 'B1', 'B2', 'B3']})
right = pd.DataFrame({'key': ['K0', 'K1', 'K4', 'K5'],
'C': ['C0', 'C1', 'C4', 'C5'],
'D': ['D0', 'D1', 'D4', 'D5']})
left
right
1、inner join,默認
左邊和右邊的key都有,才會出現(xiàn)在結(jié)果里
pd.merge(left, right, how='inner')
2、left join
左邊的都會出現(xiàn)在結(jié)果里,右邊的如果無法匹配則為Null
pd.merge(left, right, how='left')
3、 right join
右邊的都會出現(xiàn)在結(jié)果里,左邊的如果無法匹配則為Null
pd.merge(left, right, how='right')
4、 outer join
左邊、右邊的都會出現(xiàn)在結(jié)果里,如果無法匹配則為Null
pd.merge(left, right, how='outer')
五、如果出現(xiàn)非Key的字段重名怎么辦
left = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],
'A': ['A0', 'A1', 'A2', 'A3'],
'B': ['B0', 'B1', 'B2', 'B3']})
right = pd.DataFrame({'key': ['K0', 'K1', 'K4', 'K5'],
'A': ['A10', 'A11', 'A12', 'A13'],
'D': ['D0', 'D1', 'D4', 'D5']})
left
right
pd.merge(left, right, on='key')
pd.merge(left, right, on='key', suffixes=('_left', '_right'))
總結(jié)
原文鏈接:https://blog.csdn.net/weixin_47661174/article/details/124697842
相關(guān)推薦
- 2021-12-07 C語言SetConsoleTextAttribute函數(shù)使用方法_C 語言
- 2022-12-22 Android開發(fā)input問題解決分析_Android
- 2021-12-05 Android?NDK開發(fā)(C語言基本數(shù)據(jù)類型)_Android
- 2022-05-06 嵌入式C語言輕量級程序架構(gòu)內(nèi)核編寫_C 語言
- 2022-09-08 Python報錯SyntaxError:unexpected?EOF?while?parsing的解
- 2022-08-11 python中的多線程鎖lock=threading.Lock()使用方式_python
- 2022-10-17 python?文件讀寫和數(shù)據(jù)清洗_python
- 2022-05-20 Maven的配置及使用
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支