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

本人数据分析方向,完全按照SQL次日留存率的步骤来求解。 看到很多大佬用循环写,再次感叹,数据分析和计算机算法两种类型的思路的不同。 之前代码有点bug,少写了一个date2,现在已纠正。

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])

全部评论
请教下楼主,为什么data['cha'] = data['date1']-data['rk'],这里是用date1列去减rk,而不是date列去减呢。 date列去减的话,cha就能有连续三天相等的值,但date1的时间格式是'2021-12',减rk的话,cha的值每天都不同啊
1 回复 分享
发布于 2022-07-22 15:25
第10什么要加个max哇,还有最后一行这个代码没有看懂哎,虽然我知道是count>=3,求助楼主
点赞 回复 分享
发布于 2022-07-16 15:51
第十行的max的意思是找到最大的连续登录天数(例如出现两次连续,但是这两次中间有几天是不连续的,就会产生两个cha值,找最大的即可),最后一行的data是一个Series,是通过布尔值来进行值的筛选。
点赞 回复 分享
发布于 2022-07-18 14:38
楼主有空时可以稍微解释下吗,有些没看太懂。感谢。 比如第8 行date1.rank()。 date1不是只有年月吗,没有天,rank了也没意义啊。
点赞 回复 分享
发布于 2022-08-03 15:14
大佬可以解释一下rank的作用吗,不太理解。本地端建了个数据表跑了一下提示我“No numeric types to aggregate”是啥意思呀?求教呀,万分感谢
点赞 回复 分享
发布于 2022-08-03 17:17
大佬,我为什么data['rk'] = pd.to_timedelta(data.groupby(['user_id']).date1.rank(),unit='d')这一行会'NoneType' object is not callable对象不可调用。rank()函数有什么用?
点赞 回复 分享
发布于 2022-08-08 15:28
其实用窗口函数很快就可以解出来了,唉~
点赞 回复 分享
发布于 2022-08-19 11:03 广东

相关推荐

鼗:四级有点难绷,感觉能拿国家励志奖学金,学习能力应该蛮强的,四级确实不重要,但是拿这个卡你可是很恶心啊
点赞 评论 收藏
分享
喜欢走神的孤勇者练习时长两年半:池是池,发是发,我曾池,我现黑
点赞 评论 收藏
分享
手撕没做出来是不是一定挂
Chrispp3:不会,写出来也不一定过
点赞 评论 收藏
分享
评论
6
1
分享
牛客网
牛客企业服务