题解 | 牛客网连续练习题目3天及以上的用户
# 导入库 import pandas as pd import datetime as dt # 导入数据 data = pd.read_csv('nowcoder.csv') # 去掉日期的时间 data['date'] = pd.to_datetime(data['date']).dt.date # 计算每个用户在不同日期的排名,并将排名转换为datetime格式(单位为天),方便后续与日期求差 data['rank'] = pd.to_timedelta(data.groupby('user_id')['date'].rank(), unit='d') # 日期与排名求差,相等值的即为连续登录 data['diff'] = data['date'] - data['rank'] # 统计各用户连续登录次数 con_user = data.groupby(['user_id', 'diff'])['date'].count().reset_index(name='question_id') # 筛选大于3的登录天数 con_user = con_user[con_user['question_id'] >= 3] # 输出连续登录天数大于3的各用户最大登录天数 print(con_user.reset_index().groupby('user_id')['question_id'].max()) # 聚合函数聚合后生成的列默认名为被聚合的列,用例中是以question_id来聚合,就将聚合列重命名为question_id,为了显示通过
根据评论区大佬思路自己复刻了一遍,已理解代码逻辑,后续还需多练习才能根据需求自己写出代码!