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