题解 | #牛客网连续练习题目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])

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

相关推荐

totoroyyw:千年老妖😂
投递华为等公司10个岗位
点赞 评论 收藏
分享
11-06 10:58
已编辑
门头沟学院 嵌入式工程师
双非25想找富婆不想打工:哦,这该死的伦敦腔,我敢打赌,你简直是个天才,如果我有offer的话,我一定用offer狠狠的打在你的脸上
点赞 评论 收藏
分享
评论
27
4
分享
牛客网
牛客企业服务