相信很多做爬虫的日技同学都会爬电商网站,每天爬一次,大量然后监控商品是商品数据商品否降价。如果你只监控一个商品,日技那么是大量否降价这非常容易判断,但如果你要找到这个网站里面所有降价的商品数据商品商品,那就非常麻烦了。日技 如下图所示,大量是商品数据商品美国电商沃尔玛的全站商品数据: 每个商品每天都会爬一次,一共有61w+条数据。日技里面有N个商品降价了,大量现在需要把这些降价的商品数据商品商品找出来。 商品有十几万个,日技如果你分别找到每个商品的大量ID,然后用ID再找到这个商品每一天的商品数据商品数据,最后看它是否降价,服务器托管这个工作量非常大,速度也会非常慢。 Pandas内部使用了SIMB技术来对并行计算进行优化,我们需要尽量在不使用for循环的情况下,完成这个任务。 为了简单起见,我们假设降价就是指今天比昨天的价格低,不考虑先涨价再降价的情况。 要解决这个问题,我们需要使用DataFrame的pct_change()方法。它就像是reduce一样,给出一系列数据,它会计算数据改变量的百分比——第二条相对于第一条数据的改变,第三条数据相对于第二条数据的改变,第四条数据相对于第三条数据的改变。源码下载 首先我们使用date字段对数据进行排序,确保价格是按时间排列的。然后对商品的id进行分组,这样就能拿到每一个商品每天的价格了。然后对price字段使用pct_change(): 运行效果如下图所示: 图中最右侧pct字段是NaN,是因为这是这些商品的第一条数据,所以始终是NaN. 我们筛选出今天(2022-05-16),pct小于0的商品: 这些就是降价的商品了。我们可以随便筛选一个商品来检查一下: 使用pct_change()速度非常快,60w数据几乎秒出。比for循环快多了。