一日一技:如何从大量商品数据里面找到降价商品?

开发 前端
每个商品每天都会爬一次,一共有61w+条数据。里面有N个商品降价了,现在需要把这些降价的商品找出来。

相信很多做爬虫的同学都会爬电商网站,每天爬一次,然后监控商品是否降价。如果你只监控一个商品,那么是否降价这非常容易判断,但如果你要找到这个网站里面所有降价的商品,那就非常麻烦了。

如下图所示,是美国电商沃尔玛的全站商品数据:

每个商品每天都会爬一次,一共有61w+条数据。里面有N个商品降价了,现在需要把这些降价的商品找出来。

商品有十几万个,如果你分别找到每个商品的ID,然后用ID再找到这个商品每一天的数据,最后看它是否降价,这个工作量非常大,速度也会非常慢。

Pandas内部使用了SIMB技术来对并行计算进行优化,我们需要尽量在不使用for循环的情况下,完成这个任务。

为了简单起见,我们假设降价就是指今天比昨天的价格低,不考虑先涨价再降价的情况。

要解决这个问题,我们需要使用DataFrame的pct_change()方法。它就像是reduce一样,给出一系列数据,它会计算数据改变量的百分比——第二条相对于第一条数据的改变,第三条数据相对于第二条数据的改变,第四条数据相对于第三条数据的改变。

首先我们使用date字段对数据进行排序,确保价格是按时间排列的。然后对商品的id进行分组,这样就能拿到每一个商品每天的价格了。然后对price字段使用pct_change():

df2['pct'] = df2.sort_values(['date', 'id']).groupby(['id']).price.pct_change()

运行效果如下图所示:

图中最右侧pct字段是NaN,是因为这是这些商品的第一条数据,所以始终是NaN.

我们筛选出今天(2022-05-16),pct小于0的商品:

这些就是降价的商品了。我们可以随便筛选一个商品来检查一下:

使用pct_change()速度非常快,60w数据几乎秒出。比for循环快多了。

责任编辑:武晓燕 来源: 未闻Code
相关推荐

2021-09-13 20:38:47

Python链式调用

2021-03-12 21:19:15

Python链式调用

2021-11-12 05:00:43

装饰器代码功能

2021-10-15 21:08:31

PandasExcel对象

2023-10-28 12:14:35

爬虫JavaScriptObject

2024-07-30 08:16:18

Python代码工具

2022-06-28 09:31:44

LinuxmacOS系统

2024-07-30 08:11:16

2022-03-12 20:38:14

网页Python测试

2020-12-04 06:39:25

爬虫网页

2024-11-11 00:38:13

Mypy静态类型

2021-05-08 19:33:51

移除字符零宽

2021-10-06 23:17:26

Python抽象类接口

2021-04-27 22:15:02

Selenium浏览器爬虫

2020-12-11 06:30:00

工具分组DataFrame

2021-04-12 21:19:01

PythonMakefile项目

2024-02-20 22:13:48

Python项目Java

2024-08-27 22:08:13

2020-05-19 13:55:38

Python加密密码

2022-03-07 09:14:04

Selenium鼠标元素
点赞
收藏

51CTO技术栈公众号