题解 | #牛客网连续练习题目3天及以上的用户#

牛客网连续练习题目3天及以上的用户

https://www.nowcoder.com/practice/4d77709a0ea2482282ee86852fe32f06

本人数据分析方向,完全按照SQL次日留存率的步骤来求解。 看到很多大佬用循环写,再次感叹,数据分析和计算机算法两种类型的思路的不同。
很多小伙伴们问rank的作用,其实就是窗口函数,只不过这里加了一层to_datetime(),便于下面时间类型的两列做差计算。
另外倒数第二句的意思就是先找到每个人的连续天数,然后在此基础上找最大值。
(之前代码有点bug,少写了一个date2(年-月-日,为了计算cha,直接用date应该也可以),现在已纠正。)

import pandas as pd
from datetime import timedelta
nowcoder = pd.read_csv('nowcoder.csv')
# 先转时间
nowcoder['date'] = pd.to_datetime(nowcoder['date'])
# 先提取年月
nowcoder['date1'] = nowcoder['date'].dt.strftime("%Y-%m")
data = nowcoder[nowcoder['date1'] == '2021-12']
# 再获取年月日
data['date2'] = pd.to_datetime(data['date'].dt.date)
# 根据日排序
data['rk'] = pd.to_timedelta(data.groupby(['user_id']).date2.rank(),unit='d')
# 作差并获取出现次数最多的值,SQL的思路
data['cha'] = data['date2']-data['rk']
data1 = data.groupby(['user_id','cha']).count().groupby('user_id').rk.max()
print(data1[data1>=3])

全部评论
大佬,后面的.groupby('user_id').rk.max()是什么意思?为什么是对rk求最大值,两个groupby调用是啥原理?求大佬解答~
1 回复 分享
发布于 2023-09-25 13:58 湖北
一旦有重复排名结果就不正确了
1 回复 分享
发布于 2023-04-19 10:56 浙江
怎么判断日期是连续的
点赞 回复 分享
发布于 2023-04-24 18:46 江苏
没去重,有重复数据时是否会影响排名数值?
点赞 回复 分享
发布于 2023-03-27 08:53 山东

相关推荐

不愿透露姓名的神秘牛友
07-08 17:10
点赞 评论 收藏
分享
05-26 22:25
门头沟学院 Java
Java小肖:不会是想叫你过去把你打一顿吧,哈哈哈
点赞 评论 收藏
分享
07-02 10:39
门头沟学院 Java
Steven267:说点真实的,都要秋招了,还没有实习,早干嘛去了,本来学历就差,现在知道急了,而且你这个简历完全可以写成一页,劣势太大了,建议转测试
点赞 评论 收藏
分享
评论
30
4
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务