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

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

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

##参考sql的方法
import pandas as pd
from datetime import timedelta#导入计算时间差的模块
df = pd.read_csv('nowcoder.csv')
df['date'] = pd.to_datetime(df['date']).dt.date ##转换成日期(知识点2)
df1 = df[['user_id','date']].drop_duplicates()  ##对于用户和日期行去重,保证用户在一天只出现 一次
df1['rank1'] = df1.groupby('user_id')['date'].rank()  ##分用户对登录日期进行排名,返回的是排名
df1['start_date'] = df1['date'] - df1['rank1'].apply(lambda x:timedelta(x))  ##若连续登录,则登陆日期减去对应排名应为同一天(不太理解)
df1['continuous_days'] = df1.groupby(['user_id','start_date'])['date'].rank()  ##对用户和起始日期同时分类后对日期做排名,得到当前日期是连续登录的第n天
print(df1[df1['continuous_days']>=3].groupby('user_id')['continuous_days'].max())  ##其实也不需要groupby,但本题结果给的是分类的结果,因此这样操作

思路:

对日期做排名,然后用date-rank1,得到start_date,对于相同start_date的列,说明是同一起始时间的连续日期。

以user_id和strat_date分组,计算不同用户,在不同起始时间下的连续登陆时间,结果存放在continous_days列,结果如下:

提取continous_days>=3的条目,然后以user_id分组,求出每个组中continous_days的最大值,得到结果

print(df1[df1['continuous_days']>=3].groupby('user_id')['continuous_days'].max())

全部评论

相关推荐

AAA专业长城贴瓷砖刘大爷:这样的简历我会直接丢进垃圾桶,花里胡哨的
点赞 评论 收藏
分享
05-21 15:47
门头沟学院 Java
浪漫主义的虹夏:项目有亮点吗,第一个不是纯玩具项目吗,项目亮点里类似ThreadLocal,Redis储存说难听点是花几十分钟绝大部分人都能学会,第二个轮子项目也没体现出设计和技术,想实习先沉淀,好高骛远的自嗨只会害了自己
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

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