在Pandas中,如何根据Group By 结果计算 Row Number例如我们有下面的数据,第一列是用户的ID,第二列是用户的购买日期,现在如果我们需要判断用户是否重复购买,并且,每一次的购买,下一次的购买时间间隔是多少呢?
大家好,又见面了,我是你们的朋友全栈君。
有的同学在处理自己的业务逻辑的时候,需要用到Row Number的方法,那么,什么是Row Number呢?
例如我们有下面的数据,第一列是用户的ID,第二列是用户的购买日期,现在如果我们需要判断用户是否重复购买,并且,每一次的购买,下一次的购买时间间隔是多少呢?
id,date
1,20150601
1,20150603
2,20150601
2,20150605
2,20150610
3,20150503
3,20150603
4,20150601
如果我们可以处理称为下面的数据,那么这个问题就完美解决了:
id date_x date_y
0 1 20150601 20150603.0
1 1 20150603 NaN
2 2 20150601 20150605.0
3 2 20150605 20150610.0
4 2 20150610 NaN
5 3 20150503 20150603.0
6 3 20150603 NaN
7 4 20150601 NaN
date_y就是下一次的购买时间,date_y-date_x就是前后两次的购买间隔。
下面我们来看代码:
import pandas;
data = pandas.read_csv(“C:\\data\\test.csv”)
#大家注意,一定要先排序
data = data.sort([‘id’, ‘date’], ascending=[1, 1])
#使用groupby方法,然后继续调用rank方法,即可获取到每一个数据在原始数据的排序。
rnColumn = data.groupby(‘id’).rank(method=’min’)
data[‘rn’] = rnColumn;
data
Out[24]:
id date rn
0 1 20150601 1.0
1 1 20150603 2.0
2 2 20150601 1.0
3 2 20150605 2.0
4 2 20150610 3.0
5 3 20150503 1.0
6 3 20150603 2.0
7 4 20150601 1.0
在这里,我们可以看到,所谓的row Number,就是指在指定的分组中,它相对于非分组列,也就是date的排序号。
因为,我们希望得到某行对下一行的连接,因此,下一行,减一,就可以和上一行对应上了。
data[‘rn_1’] = rnColumn-1
#how参数,设置保留所有左边的表的输入。
data.merge(data, how=’left’, left_on=[‘id’, ‘rn’], right_on=[‘id’, ‘rn_1’])
这样子,我们就可以得到以下的结果了,我们通过筛选列,就可以得到我们的目标数据了。
data.merge(data, how=’left’, left_on=[‘id’, ‘rn’], right_on=[‘id’, ‘rn_1’])
Out[21]:
id date_x rn_x rn_1_x date_y rn_y rn_1_y
0 1 20150601 1.0 0.0 20150603.0 2.0 1.0
1 1 20150603 2.0 1.0 NaN NaN NaN
2 2 20150601 1.0 0.0 20150605.0 2.0 1.0
3 2 20150605 2.0 1.0 20150610.0 3.0 2.0
4 2 20150610 3.0 2.0 NaN NaN NaN
5 3 20150503 1.0 0.0 20150603.0 2.0 1.0
6 3 20150603 2.0 1.0 NaN NaN NaN
7 4 20150601 1.0 0.0 NaN NaN NaN
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/136545.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...