当前位置: 首页 > news >正文

模块六-数据合并与连接——32. merge 合并(上)

32. merge 合并上1. 概述merge是 Pandas 中最强大的数据合并函数类似于 SQL 中的 JOIN 操作。它可以根据一个或多个键将两个 DataFrame 的行连接起来。importpandasaspdimportnumpyasnp# 创建示例数据# 员工表employeespd.DataFrame({员工ID:[101,102,103,104,105],姓名:[张三,李四,王五,赵六,钱七],部门ID:[1,2,1,3,2]})# 部门表departmentspd.DataFrame({部门ID:[1,2,3,4],部门名称:[技术部,销售部,市场部,人事部]})print(员工表:)print(employees)print(\n部门表:)print(departments)2. 内连接Inner Join内连接只保留两个表中键匹配的行。# 内连接resultpd.merge(employees,departments,on部门ID,howinner)print(内连接结果:)print(result)# 等价于resultpd.merge(employees,departments,on部门ID)print(\n默认是内连接:)print(result)3. 左连接Left Join左连接保留左表的所有行右表没有匹配的用 NaN 填充。# 左连接resultpd.merge(employees,departments,on部门ID,howleft)print(左连接结果:)print(result)4. 右连接Right Join右连接保留右表的所有行左表没有匹配的用 NaN 填充。# 右连接resultpd.merge(employees,departments,on部门ID,howright)print(右连接结果:)print(result)5. 外连接Full Outer Join外连接保留两个表的所有行没有匹配的用 NaN 填充。# 外连接resultpd.merge(employees,departments,on部门ID,howouter)print(外连接结果:)print(result)6. 连接方式对比# 创建演示数据df_leftpd.DataFrame({key:[A,B,C,D],value_left:[1,2,3,4]})df_rightpd.DataFrame({key:[B,C,D,E],value_right:[5,6,7,8]})print(左表:)print(df_left)print(\n右表:)print(df_right)# 四种连接方式对比joins[inner,left,right,outer]forjoin_typeinjoins:resultpd.merge(df_left,df_right,onkey,howjoin_type)print(f\n{join_type}连接:)print(result)7. 多键合并# 创建多键数据df1pd.DataFrame({部门:[技术,技术,销售,销售],级别:[P5,P6,P5,P6],人数:[10,5,8,3]})df2pd.DataFrame({部门:[技术,技术,销售,销售],级别:[P5,P6,P5,P6],平均工资:[15000,20000,12000,18000]})print(df1:)print(df1)print(\ndf2:)print(df2)# 多键合并resultpd.merge(df1,df2,on[部门,级别])print(\n多键合并结果:)print(result)8. 不同列名合并# 当两个表的键列名不同时df_emppd.DataFrame({emp_id:[1,2,3],姓名:[张三,李四,王五],dept_id:[101,102,101]})df_deptpd.DataFrame({id:[101,102,103],部门:[技术部,销售部,市场部]})print(员工表:)print(df_emp)print(\n部门表:)print(df_dept)# 指定左右表的键列名resultpd.merge(df_emp,df_dept,left_ondept_id,right_onid)print(\n不同列名合并:)print(result)# 删除重复的列resultpd.merge(df_emp,df_dept,left_ondept_id,right_onid).drop(id,axis1)print(\n删除重复列后:)print(result)9. 处理重复列名# 创建带重复列名的数据df_apd.DataFrame({key:[1,2,3],value:[A1,A2,A3],common:[X,Y,Z]})df_bpd.DataFrame({key:[2,3,4],value:[B2,B3,B4],common:[Y,Z,W]})print(df_a:)print(df_a)print(\ndf_b:)print(df_b)# 默认添加后缀resultpd.merge(df_a,df_b,onkey)print(\n默认后缀:)print(result)# 自定义后缀resultpd.merge(df_a,df_b,onkey,suffixes(_左,_右))print(\n自定义后缀:)print(result)10. 完整示例订单与客户数据# 创建订单数据orderspd.DataFrame({订单号:[ORD001,ORD002,ORD003,ORD004,ORD005],客户ID:[1,2,1,3,4],金额:[500,800,300,1200,600],日期:pd.date_range(2024-01-01,periods5)})# 创建客户数据customerspd.DataFrame({客户ID:[1,2,3,5],姓名:[张三,李四,王五,赵六],城市:[北京,上海,广州,深圳],等级:[黄金,铂金,黄金,普通]})print(*60)print(订单与客户数据合并)print(*60)print(\n订单表:)print(orders)print(\n客户表:)print(customers)# 1. 内连接只有有客户的订单print(\n1. 内连接有客户的订单:)inner_joinpd.merge(orders,customers,on客户ID,howinner)print(inner_join)# 2. 左连接所有订单print(\n2. 左连接所有订单:)left_joinpd.merge(orders,customers,on客户ID,howleft)print(left_join)# 3. 右连接所有客户print(\n3. 右连接所有客户:)right_joinpd.merge(orders,customers,on客户ID,howright)print(right_join)# 4. 外连接所有订单和所有客户print(\n4. 外连接所有数据:)outer_joinpd.merge(orders,customers,on客户ID,howouter)print(outer_join)# 5. 分析各城市订单金额print(\n5. 各城市订单金额统计:)city_salespd.merge(orders,customers,on客户ID,howleft).groupby(城市)[金额].sum()print(city_sales)11. 连接方式总结连接方式SQL 类比说明howinnerINNER JOIN只保留匹配的行howleftLEFT JOIN保留左表所有行howrightRIGHT JOIN保留右表所有行howouterFULL OUTER JOIN保留两表所有行
http://www.gsyq.cn/news/1299241.html

相关文章:

  • 中国人工智能培训网—AI系列录播课#大模型#智能体#关键能力#提示词
  • 免费开源鼠标连点器MouseClick:解放双手的终极效率工具
  • 从FAST-LIO2的代码里,我学到的5个C++工程实践技巧(附ikd-Tree源码分析)
  • 电镀整流机生产厂家选择:靠谱供应商评估维度深度解析
  • 用自然语言控制你的电脑:UI-TARS桌面AI助手完全指南
  • 基于Feather RP2040与CircuitPython的CNC旋钮宏键盘DIY指南
  • BeagleBone Black设备树覆盖层实战:从原理到自定义SPI/UART配置
  • 基于LPC55S69与墨水屏的低功耗桌面气象站开发全解析
  • 【限时技术解禁】ElevenLabs马拉雅拉姆文隐藏参数曝光:--voice_stability=0.37与--style_expansion=1.85的真实效用(实测WER降低22.6%)
  • LangGraph Agent 开发指南(10~子图 Subgraphs)
  • 命令行知识管理工具brain-cli:极简设计助力开发者高效管理碎片信息
  • Unity强化学习控制器:游戏AI开发实战指南
  • 企业级应用如何通过 Taotoken 统一管理多个团队的模型调用
  • 终极指南:用yt-dlp-gui轻松搞定Windows视频下载,3步搞定高清视频
  • 5G NR里的LDPC参数怎么选?一个6144比特数据块的实战推演
  • Linux驱动开发:原子操作实现LED设备互斥访问
  • Linux系统下Vue开发环境搭建:从Node.js到Vite的完整指南
  • ElevenLabs阿拉伯文语音生成失效真相(方言适配盲区大起底)
  • 构建开源图像生成模型与OpenAI API的标准化桥梁
  • 二分查找60-65
  • 从零构建生成式AI应用:四层学习框架与RAG实战指南
  • 基于深度学习的智能职业匹配系统设计与实现
  • 基于有限变形理论的FCC单晶与多晶塑性本构模型研究
  • 刘伟:AI“炼化”的赛博分身,复刻不了激情与创造
  • 从‘相似’到‘原型’:深入对比Siamese Network和Prototypical Network,教你为电影分类任务选对模型
  • 基于Backstage构建企业级AI开发平台:架构设计与工程实践
  • AI智能体工具搜索系统:从MCP协议到语义检索的工程实践
  • TTS 引擎的 MOS 评分到底有多高?顶伯实测
  • 香橙派平板从零启动指南:配件选型、系统烧录与首次启动全解析
  • 光敏互动徽章制作:融合Arduino、NeoPixel与导电缝纫的智能穿戴实践