题解 | #牛客网用户练习的平均次日留存率#
牛客网用户练习的平均次日留存率
https://www.nowcoder.com/practice/1f9e2b9be96b4b27a2476f8f12c5d29f
import pandas as pd from datetime import timedelta data1=pd.read_csv('nowcoder.csv') data1['date']=pd.to_datetime(data1['date']).dt.date#将时间列转换成datetime格式 data=pd.merge(data1,data1,on='user_id',suffixes=['_x','_y'])#syffixes:为合并后相同的列换名字 data['differ'] = data['date_x']-data['date_y']#计算时间差(这里不理解哇,按照道理不应该全是0?) data=data.query('differ=="1 days"') all_num = data1['user_id'].count() again_num = data['user_id'].count() print(round(again_num/all_num,2))
对于一开始全是0的解答:
在进行data1和data1的merge时,利用了笛卡尔积,得到的是组合
例如:原数据如下:
则合并后如下:
合并方式:对于on条件下相同的字段,进行组合(4×4+1×1+1×1=18)条条目。此时就可以理解,为什么列存在不为0的了