在Pandas中,如何根据Group By 结果计算 Row Number

在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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/136545.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Java编译时注解自动生成代码[通俗易懂]

    Java编译时注解自动生成代码[通俗易懂]在开始之前,我们首先申明一个非常重要的问题:我们并不讨论那些在运行时(Runtime)通过反射机制运行处理的注解,而是讨论在编译时(Compiletime)处理的注解。注解处理器是一个在javac中的,用来编译时扫描和处理的注解的工具。可以为特定的注解,注册自己的注解处理器。一个注解的注解处理器,以Java代码(或者编译过的字节码)作为输入,生成文件(通常是.java文件)作为输出。可以生成Java代码,这些生成的Java代码是在生成的.java文件中,所以不能修改已经存在的Java类,例如向已有的类中

    2022年5月27日
    281
  • qq群大数据可视化查询_QQ数据库

    qq群大数据可视化查询_QQ数据库2009年QQ群关系数据库可视化查询器优化推广获客神器十年老数据库最近很多人问这个QQ群关系数据库的事儿,拉出来聊一聊,顺带做了部分优化之前这个是被很多大神玩丢下来的东西,近几年手游市场的兴起,又成了手游市场的获客神器2012年之前封存的群关系数据,收录了将近8000万条群组信息,包含各种行业群,交友群,游戏群,手游推广的主要客户群体还是来源于游戏相关的群。简单讲,就是通过QQ群关系数据库,获取十年前的端游客户,从而转化为手游的消费者。为何要用这么

    2022年10月2日
    1
  • JavaWeb总结–Servlet 工作原理解析

    JavaWeb总结–Servlet 工作原理解析

    2021年9月16日
    40
  • 模仿学习笔记:行为克隆

    模仿学习笔记:行为克隆1模仿学习模仿学习(ImitationLearning)不是强化学习,而是强化学习的一种替代品。 模仿学习与强化学习有相同的目的: 两者的目的都是学习策略网络,从而控制智能体。 模仿学习与强化学习又有不同的原理: 模仿学习向人类专家学习,目标是让策略网络做出的决策与人类专家相同; 强化学习利用环境反馈的奖励改进策略,目标是让累计奖励(即回报)最大化。 2行为克隆概述行为克隆(BehaviorCloning)是最简单的模仿学习。 行为克隆的目的是模仿人的动作

    2022年9月15日
    0
  • linux awk数组长度,linux awk数组操作详细介绍[通俗易懂]

    linux awk数组长度,linux awk数组操作详细介绍[通俗易懂]linuxawk数组操作详细介绍用awk进行文本处理,少不了就是它的数组处理。那么awk数组有那些特点,一般常见运算又会怎么样呢。我们先看下下面的一些介绍,结合例子我们会讲解下它的不同之处。在awk中数组叫做关联数组(associativearrays),因为下标记可linuxawk数组操作详细介绍用awk进行文本处理,少不了就是它的数组处理。那么awk数组有那些特点,一般常见运算又…

    2022年7月19日
    132
  • laravel-事件监听-核心解读「建议收藏」

    laravel-事件监听-核心解读「建议收藏」laravel-事件监听-核心解读

    2022年4月24日
    42

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号