58

Python与SQL对比:处理用户记录相邻的时间差

 5 years ago
source link: https://ask.hellobi.com/blog/Matthew112/15643?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

文字标题看起来好拗口...的说...

先来一个主题案例吧,方便大家理解:

我有一家超市,运营两年了,系统存储了所有用户的购买记录,我想要分析一下每个用户进店的时间间隔是怎样的(比如A客户第一次进店与第二次进店间隔5天,第二次进店与第三次进店间隔7天......),咋办呢?(听到这里明白了吗...)

我们用Python的pandas和SQL同时做一下这个需求,互相比较:

具体数据如下:

id是客户ID,time是进店购买的时间

iU7NZbv.png!web

先来一个SQL代码,在MySQL上运行的:

2QVvqia.png!web

处理结果:

ZNnqIba.png!web

乍眼一看,SQL好强大啊,一行搞定需求,但是语言理解上略过逊色,不好读不好懂。

那么如果用Python的pandas来处理呢:

1.先导入一下包和数据源:

YRvyQry.png!web

2.按照id和时间排序:

jeU3Qbz.png!web

3.groupby与shift组合使用,依据id列将time列进行偏移:

riUFZfN.png!web

偏移的结果:

uQRBVzM.png!web

4.基于偏移后的dataframe进行两个时间列做差:

zyAvqmV.png!web

做差结果如下:

aiIfQ3z.png!web

5.这里会发现结果还是不尽人意,diff列的数值不方便后期计算,那么我们自定义一个函数来搞一下:

JVN3yqv.png!web

最终结果如下:

MZvIfiy.png!web

同样是行列之间,pandas的DataFrame操作更加直观,SQL则更加简练,各有春秋!

<b style="font-size:14px;font-family:"Helvetica Neue", STHeiti, 微软雅黑, "Microsoft YaHei", Helvetica, Arial, sans-serif;">技术没有高低之分,只是使用技术人的水平不同而已,献丑献丑!</b>

个人原创,转载请联系! 个人原创,转载请联系! 个人原创,转载请联系!

uIVvMjy.png!webnMRZji7.png!webjIzUBbU.jpg!webnMRZji7.png!web

本文由马修 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。

转载、引用前需联系作者,并署名作者且注明文章出处。

本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK