需求背景

有两张表,A表记录了很多款产品的三个基础字段,分别是产品ID,地区代码和重量:

B表是运费明细表,这个表结构很“业务”。每行对应着单个地区,不同档位重量,所对应的运费:

比如121地区,0-0.5kg的产品,运费是5.38元;2.01(实际应该是大于1)-3kg,运费则是5.44元。

现在,我们想要结合A表和B表,统计出A表每个产品付多少运费,应该怎么实现?

可以先自己思考一分钟图片

解题思路

人海战术

A表一共215行,我们只需要找215个人,每个人只需要记好自己要统计那款产品的地区代码和重量字段,然后在B表中根据地区代码,找到所在地区运费标准,然后一眼扫过去,就能得到最终运费了。

两个“只需要”,问题就这样easy的解决了。

问题变成了,我还差214个人。

解构战术

通过人海战术,我们其实已经明确了解题的朴素思路:根据地区代码和重量,和B表匹配,返回运费结果。

难点在于,B表是偏透视表结构的,运费是横向分布,用Pandas就算用地区代码匹配,还是不能找到合适的运费区间。

怎么办呢?

如果我们把B表解构,变成“源数据”格式,问题就全部解决了:

转换完成后,和A表根据地区代码做一个匹配筛选,答案就自己跑出来了。

下面是动手时刻。

具体实现

先导入数据,A表(product):

B表(cost):

要想把B表变成“源数据”的格式,关键在于理解stack()堆叠操作,结合示例图比较容易搞懂:

通过stack操作,把多列变为单列多行,原本的2列数据堆成了1列,从而方便了一些场景下的匹配。要变回来也很简单,unstack即可:

在我们的具体场景中,先指定好不变的索引列,然后直接上stack:

这样,就得到了我们目标的源数据。接着,A表和B表做匹配:

值得注意的是,因为我们根据每个地方的重量区间做了堆叠,这里的匹配结果,每个产品保留了对应地区,所有重量区间的价格,离最终结果还有一步之遥。

需要把重量区间做拆分,从而和产品重量对比,找到对应的重量区间:

接着,根据重量的最低、最高区间,判断每一行的重量是否符合区间:

最后,筛选出符合区间的产品,及对应的价格等字段:

数据源

地区代码 地区缩写    0~0.5   0.501~1 1.01~2  2.01~3  3.01~4  4.01~5  5.01~7  7.01~10 10.01~15    15.01~100000
121 AS  5.38    5.38    5.38    5.44    5.53    5.58    5.58    6.09    6.1 6.24
122 BW  6.70    6.80    7.13    7.49    7.85    8.21    9.05    10.04   11.69   13.96
123 Gos 7.21    7.34    7.68    8.09    8.46    8.88    9.8 10.88   12.65   15.11
124 Wol 7.21    7.34    7.68    8.09    8.46    8.88    9.8 10.88   12.65   15.11
125 New 7.21    7.34    7.68    8.09    8.46    8.88    9.8 10.88   12.65   15.11
126 Can 7.21    7.34    7.68    8.09    8.46    8.88    9.8 10.88   12.65   15.11
127 Alb 7.21    7.31    7.65    8.05    8.46    8.86    9.76    10.84   12.61   15.09
128 Twe 7.21    7.23    7.64    8.04    8.44    8.84    9.75    10.83   12.61   15.09
129 NSW 8.93    9.71    10.85   12.01   13.16   14.4    16.71   20.19   26  34.2
130 Mel 6.75    8.04    8.51    8.9 9.41    9.95    10.94   12  14.08   17.13
131 Mlo 7.14    8.43    8.86    9.34    9.85    10.35   11.45   12.66   14.73   17.93
132 Gee 7.69    10.83   11.49   12.25   12.99   13.74   15.39   17.25   20.38   25.28
133 Bal 7.69    12.36   13.29   14.28   15.29   16.28   18.45   20.95   25.23   31.86
134 Wod 7.69    9.75    10.39   11.08   11.8    12.51   14.08   15.84   18.85   23.54
135 VIC 8.74    14.59   15.74   16.98   18.18   19.46   21.73   24.88   30.14   38.41
136 Bri 6.83    7.94    8.38    8.86    9.41    9.99    11.03   12.15   14.1    17.1
137 BTT 7.36    8.34    8.83    9.34    9.9 10.41   11.61   12.94   15.21   18.74
138 Ips 7.93    10.91   11.84   12.84   13.86   14.83   17.04   19.63   23.98   30.79
139 Gol 7.93    9.30    10.20   11.13   12.09   13.08   15.08   17.53   21.65   28.14
140 Coo 7.93    9.59    10.26   11.01   11.76   12.55   14.23   16.13   19.4    24.55
141 Sun 7.93    10.86   11.84   12.86   13.88   14.83   17.04   19.63   23.99   30.8
142 QA  9.04    13.84   15.31   16.81   18.3    19.84   22.64   26.44   32.91   43.01
143 QLD 9.04    14.50   16.70   18.89   21.13   23.4    27.56   33.33   43.26   58.7
144 LDQ 9.04    14.81   17.30   19.81   22.33   24.91   29.71   36.23   47.55   65.23
145 Ade 7.15    8.40    9.04    9.66    10.28   10.96   12.39   14.08   16.94   21.43
146 AD  7.36    8.44    9.05    9.7 10.34   11.03   12.49   14.15   17.06   21.55
147 SA  9.04    14.20   16.13   18.03   19.99   21.96   25.68   30.69   39.41   59.41
148 Per 7.31    10.50   11.95   13.45   14.94   16.45   19.25   23.1    29.69   39.99
149 Pe  7.51    10.79   12.25   13.81   15.33   16.85   19.75   23.66   30.43   40.96
150 WA  9.04    16.25   20.23   24.25   28.35   32.5    40.31   51.03   69.5    98.51
151 WAE 9.04    16.39   20.49   24.64   28.86   33.18   41.16   52.19   71.26   101.09
152 Tas 7.30    10.23   11.33   12.46   13.66   14.85   17.04   20.05   25.24   33.31
153 TWB 8.41    11.48   12.70   13.95   15.3    16.63   19.09   22.49   28.3    37.35
154 NTA 9.04    16.34   20.39   24.49   28.66   32.9    40.88   51.79   70.66   100.2
155 NTB 9.04    16.34   20.39   24.49   28.66   32.9    40.88   51.79   70.66   100.2
156 Nor 7.75    12.73   14.96   17.19   19.43   21.66   25.9    31.68   41.71   57.31
157 Chr 7.75    14.43   17.35   20.31   23.26   26.21   31.81   39.48   52.76   73.41
158 Aus 7.75    11.81   13.11   14.44   15.74   17.04   19.54   22.94   28.81   37.98

MySQL实战案例100例(一)-如何解决非等值范围查找问题?相关推荐

  1. php数据库访问辅助类,php+MySQL实战案例【二】php数据库辅助类

    前言 在学习php的时候需要经常对mysql数据库进行增删改查操作,为了减少冗余代码,我们把数据操作的方法封装成一个php类.在不同的业务场景需要用到数据库表的数据操作时,只需在php文件开头引入我们 ...

  2. php mysql删除失败_php+MySQL实战案例【七】数据编辑、删除

    ​本节内容中讲解用户管理模块中的修改用户信息和删除用户. 修改用户信息: 可对选择的用户记录进行编辑,可修改用户名.密码.性别.手机.邮箱和地址信息. 删除用户信息: 将列表中指定的用户进行删除操作. ...

  3. php mysql 源码_【完结】php+MySQL实战案例【九】总结及源码分享

    ​PHP+MySQL 综合案例分享 总结及源码分享 案例功能 1.用户登录 统一登录页面,系统在登录时自动判断身份,管理登录时跳转到用户管理后台.普通用户登录时跳转至用户欢迎页. 系统登录: 管理员首 ...

  4. MySQL实战案例练习

    案例1. /*Columns of Table members: member_id bigint(255) PK 会员id gender varchar(255) 性别 age int(255) 年 ...

  5. 知识图谱应用实战案例100篇(二)-以知识图谱的方式打开预训练语言模型

    前言 关于"知识"的话题有两条不同的技术思路. 一条思路认为需要构建知识图谱,利用符号化的表示手段描述知识,才能完成复杂的语言理解和推理问题. 另外一条思路认为可以利用语言预训练模 ...

  6. 知识图谱应用实战案例100篇(一)-阿里巴巴超大规模知识图谱预训练实践:商品分类

    基于电子商务平台上亿级的庞大商品库,电子商务交易得以不断增长. 为了更好地支持日常业务,需要将这些海量的商品以一种更优的方式进行描述.存储和计算,并且需要支持融合不同来源的数据,建立实体之间的语义连接 ...

  7. Java编程入门100例之二十二(字符串查找)

    字符串是各种编程语言中的最基础的数据类型,本文介绍字符串中一个常见的操作,如何检查字符串是否包含我们想要的东西. 代码如下: public class Test { public static voi ...

  8. Mysql实战之快速填充序列维度表

    Mysql实战案例五之快速填充序列维度表 1.需求 2.代码 3.执行效果 4. create table nums( a int UNSIGNED not null primary key )eng ...

  9. 深度学习100例 - 常见错误 及 处理办法

    文章目录 1.module 'tensorflow._api.v2.data' has no attribute 'AUTOTUNE 2.module 'tensorflow.keras.prepro ...

最新文章

  1. 以太坊Geth几种同步模式
  2. php 常用session函数,PHP Session 常用的函数
  3. 用户操作计算机系统的基本工具是什么,在Windows支持下,用户操作计算机系统的基本工具是______。...
  4. 成本费用跨年取得发票的财务、税务处理
  5. C++允许重载的运算符和不允许重载的运算符
  6. 妲己机器人需要什么条件才能使用_estar零封YTG:平头哥快乐电竞,只有妲己没亚瑟,差评...
  7. html5怎么在index设置背景,index.html · huangliusong/HTML5Canvas知乎登录页面动态线条背景动画代码 - Gitee.com...
  8. 20210701:随机信号的功率谱估计相关算法的实现
  9. 二维数组信号 显示波形_LabVIEW编程:如何将数据存为电子表格文件,并读取进行波形显示...
  10. Oracle基本数据范例存储名堂浅析
  11. VS2015编译程序兼容XP
  12. 【分布式定时任务】定时任务实现几种方式
  13. word怎么删除参考文献的横线_Word2010利用尾注做参考文献时如何删除尾注中的横线...
  14. Es6模板字符串条件判断
  15. python3单例模式_python3中的单例模式Singleton
  16. 解决Android打包Entry name ‘res/animator/linear_indeterminate_line1_head_interpolator.xml‘ collided
  17. vue3:加载本地图片等静态资源
  18. 刀口舔血,步步惊心!——Android中小开发者/团队广告盈利全攻略
  19. 设置(改变)eclipse背景颜色
  20. 虚拟磁盘管理器 设备未就绪_多磁盘管理,用于捕获虚拟设备和版本控制

热门文章

  1. 工业以太网交换机有多少个快速以太网接口?
  2. 【渝粤教育】电大中专跨境电子商务理论与实务 (19)作业 题库
  3. 【渝粤教育】电大中专混凝土结构作业 题库
  4. 【渝粤题库】国家开放大学2021春1253C语言程序设计题目
  5. 通信距离与哪些因素相关?为什么模块通信距离和厂家宣传的不一样?
  6. php mysql ppt,7PHP访问数据库分析.ppt
  7. 计算机怎么录制视频教程,怎么录制视频教程?查看电脑具体录屏方法
  8. 查询阜阳2021高考成绩,2021年阜阳高考成绩排名及成绩公布时间什么时候出来
  9. jquery部分方法
  10. RabbiqMQ快速入门