import pandas as pd from datetime import timedelta nowcoder = pd.read_csv("nowcoder.csv") # 总数 total_id = nowcoder["user_id"].count() b = pd.merge(nowcoder, nowcoder, on="user_id") # merge之后的列名:user_id,question_id_x,result_x,date_x,question_id_y,result_y,date_y # 是自动区分xy的 b["date_x"] = pd.to_datetime(b.date_x).dt.date # to_datetime默认有时间精度,.dt.date去掉分钟,得到日期列表2021-12-1 b["date_y"] = pd.to_datetime(b.date_y).dt.date b["differ"] = b.date_y - b.date_x sum_diff = b[b.differ == "1 days"].differ.count() res = round(sum_diff / total_id, 2) print(res)
利用笛卡尔积获取用户留存行为记录。把所有用户的每次次日留存行为的总和记作总留存数(为分子),总用户行为数量记作分母,不考虑重复情况。
但是这道题如果连续登录7天就会有6次留存行为,这个算法有点怪