专栏首页用户6291251的专栏解一道反常的Pandas题(附源数据和代码)

解一道反常的Pandas题(附源数据和代码)

大家好,我是小z

潘大师(Pandas)基础教程和实战案例我写了不少,增、删、改、查这样的常规操作,感兴趣的同学多看、多练基本上都能掌握的差不多。

但是,实际业务场景,由于各种原因,总会有一些反常的需求。今天这个反常又有代表性的需求,来源于粉丝的提问,相关数据已经做了完全脱敏处理,供大家实战练手。

需求背景

有两张表,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表做匹配:

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

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

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

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

本文分享自微信公众号 - 法纳斯特(walker398)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-03-18

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 复购分析实战 | Pandas遇到了大难题..(附40000+数据源和代码)

    在电商等消费场景下,复购率是最耳熟能详的指标之一了。上到平台、下到品牌、店铺,各种复盘分析一定绕不开复购率,今天我们就从实战的角度聊聊复购率。

    朱小五
  • 这里有 300 篇 Python 与机器学习类原创笔记

    主要包括计算机科学中基本的算法与数据结构,结合算法思想和Leetcode实战,总结介绍。

    好好学java
  • Pandas 练习题 - 提高你的数据分析技能

    Pandas 是基于 NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所...

    用户1737318
  • 开源|MultiNet模型解决Kitti数据集自动驾驶中的道路分割、车辆检测和街道分类(附源代码)

    MultiNet能够同时完成道路分割、汽车检测和道路分类的任务。MultiNet模型的实时存档速度和分割性能都处于最先进水平。详细的模型描述请查阅我们的论文。

    用户1908973
  • 利用 Pandas 的 transform 和 apply 来处理组级别的丢失数据

    根据 Businessbroadway 的一项分析,数据专业人员将会花高达 60% 的时间用于收集、清理和可视化数据。

    AI研习社
  • 独家 | 10 个简单小窍门带你提高Python数据分析速度(附代码)

    提示和技巧总是非常有用的,在编程领域更是如此。有时候,小小的黑科技可以节省你大量的时间和精力。一个小的快捷方式或附加组件有时会是天赐之物,可以成为实用的效率助推...

    数据派THU
  • 首发:适合初学者入门人工智能的路线及资料下载

    我曾经写了一篇初学者入门的文章:《机器学习简易入门-附推荐学习资料》,这篇文章给初学者指明了学习的方向,受到广大初学者好评。

    kbsc13
  • 盘点最重要的7个Python库

    NumPy是Numerical Python的简写,是Python数值计算的基石。它提供多种数据结构、算法以及大部分涉及Python数值计算所需的接口。NumP...

    华章科技
  • 加速Python数据分析的10个简单技巧(上)

    总有一些小贴士和技巧在编程领域是非常有用的。有时,一个小技巧可以节省时间甚至可以挽救生命。一个小的快捷方式或附加组件有时会被证明是天赐之物,并能真正提高生产力。...

    AiTechYun

扫码关注云+社区

领取腾讯云代金券