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

简介: 潘大师(Pandas)基础教程和实战案例我写了不少,增、删、改、查这样的常规操作,感兴趣的同学多看、多练基本上都能掌握的差不多。但是,实际业务场景,由于各种原因,总会有一些反常的需求。今天这个反常又有代表性的需求,相关数据已经做了完全脱敏处理,供大家实战练手。

需求背景


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


image.png


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


image.png

比如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表解构,变成“源数据”格式,问题就全部解决了:


image.png


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


下面是动手时刻。


具体实现


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


image.png


B表(cost):


image.png


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


image.png


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


image.png


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


image.png


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


image.png


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


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


image.png


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


image.png


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


image.png


大功告成~

相关文章
|
10天前
|
数据采集 数据挖掘 数据处理
使用Python和Pandas处理CSV数据
使用Python和Pandas处理CSV数据
43 5
|
23天前
|
存储 移动开发 测试技术
在pandas中利用hdf5高效存储数据
在pandas中利用hdf5高效存储数据
|
23天前
|
数据采集 分布式计算 并行计算
Dask与Pandas:无缝迁移至分布式数据框架
【8月更文第29天】Pandas 是 Python 社区中最受欢迎的数据分析库之一,它提供了高效且易于使用的数据结构,如 DataFrame 和 Series,以及大量的数据分析功能。然而,随着数据集规模的增大,单机上的 Pandas 开始显现出性能瓶颈。这时,Dask 就成为了一个很好的解决方案,它能够利用多核 CPU 和多台机器进行分布式计算,从而有效地处理大规模数据集。
48 1
|
23天前
|
索引 Python
python pandas 把数据保存成csv文件,以及读取csv文件获取指定行、指定列数据
该文档详细介绍了如何使用Python的Pandas库处理图像数据集,并将其保存为CSV文件。示例数据集位于`test_data`目录中,包含5张PNG图片,每张图片名中的数字代表其标签。文档提供了将这些数据转换为CSV格式的具体步骤,包括不同格式的数据输入方法(如NumPy数组、嵌套列表、嵌套元组和字典),以及如何使用`pd.DataFrame`和`to_csv`方法保存数据。此外,还展示了如何读取CSV文件并访问其中的每一行和每一列数据,包括获取列名、指定列数据及行数据的操作方法。
29 1
|
2月前
|
存储 数据可视化 Python
Python中的数据可视化:使用Matplotlib和Pandas探索数据
【7月更文挑战第31天】 在数据科学的世界里,可视化是理解复杂数据集的关键。本文将引导你通过Python的Matplotlib库和Pandas库来揭示数据背后的故事。我们将一起构建图表,从简单的线图到复杂的热图,每一步都将用代码示例来丰富你的理解。文章不仅仅是展示如何绘制图表,更是一次深入探索数据结构和模式的旅程。
51 8
|
23天前
|
数据可视化 Python
Pandas可视化指南:从零教你绘制数据图表
Pandas可视化指南:从零教你绘制数据图表
|
1月前
|
Python
Pandas 读取Eexcel - 间隔N行,读取某列数据
Pandas 读取Eexcel - 间隔N行,读取某列数据
24 0
|
1月前
|
Python
【Pandas】Pandas的DataFrame按行插入list数据或者读取一行并存为csv文件
本文提供了使用Pandas库对DataFrame进行操作的示例代码。
72 0
|
2月前
|
存储 数据可视化 数据处理
`geopandas`是一个开源项目,它为Python提供了地理空间数据处理的能力。它基于`pandas`库,并扩展了其对地理空间数据(如点、线、多边形等)的支持。`GeoDataFrame`是`geopandas`中的核心数据结构,它类似于`pandas`的`DataFrame`,但包含了一个额外的地理列(通常是`geometry`列),用于存储地理空间数据。
`geopandas`是一个开源项目,它为Python提供了地理空间数据处理的能力。它基于`pandas`库,并扩展了其对地理空间数据(如点、线、多边形等)的支持。`GeoDataFrame`是`geopandas`中的核心数据结构,它类似于`pandas`的`DataFrame`,但包含了一个额外的地理列(通常是`geometry`列),用于存储地理空间数据。
|
2月前
|
存储 消息中间件 数据挖掘
Python实时数据分析:利用丰富的库(如Pandas, PySpark, Kafka)进行流处理,涵盖数据获取、预处理、处理、存储及展示。
【7月更文挑战第5天】Python实时数据分析:利用丰富的库(如Pandas, PySpark, Kafka)进行流处理,涵盖数据获取、预处理、处理、存储及展示。示例代码展示了从Kafka消费数据,计算社交媒体活跃度和物联网设备状态,并可视化结果。适用于监控、故障检测等场景。通过学习和实践,提升实时数据分析能力。
74 0