题解 | #牛客网连续练习题目3天及以上的用户#
牛客网连续练习题目3天及以上的用户
https://www.nowcoder.com/practice/4d77709a0ea2482282ee86852fe32f06
def countday(t): s = 0 f = 0 for i in range(len(t)): if i < len(t)-1: if t[i+1] == (t[i] + 1): s = s+1 f = max(f, s) else: s = 0 return f+1 import pandas as pd pf = pd.read_csv('nowcoder.csv')[['user_id','date']] //读表格 pf['date'] = pd.to_datetime(pf['date'],format="%Y-%m-%d").dt.date //转换日期 pf['date'] = pf['date'].astype('str').str[8:] //截取日 pf['date'] = pd.to_numeric(pf['date']) //日转换成数字 pf = pf.drop_duplicates() //去重 pid = pf['user_id'].drop_duplicates() //id去重,下面用来遍历 list1 = [] for i in pid.to_list(): //遍历id t = pf[pf['user_id']==i]['date'].to_list() //把遍历到的id的日期读出来转换成列表 if len(t)>=3: //判断是否大于三天 day = countday(t) //计算连续登录天数 if day >=3: for _ in range(day): //因为答案要求的是一个统计输出,所以这里多添加几行 list1.append(str(i)) //把符合连续登陆天数的id存到列表里 pp = pd.DataFrame(list1,columns=['user_id']) //把列表转换成DateFrame print(pp.groupby('user_id')['user_id'].count()) //按题目要求统计输出