0

0

Python如何做留存分析_计算用户次日留存与7日留存率全量Pandas代码

P粉602998670

P粉602998670

发布时间:2026-03-17 10:25:31

|

842人浏览过

|

来源于php中文网

原创

次日留存率应统计“某天首次登录用户中第二天活跃的比例”,需先按user_id分组取event_time最小值作为first_login_date,再合并回原表;日期比较须统一转为dt.date后计算整数天差,避免精度误差。

python如何做留存分析_计算用户次日留存与7日留存率全量pandas代码

pandas.DataFrame.groupby 按用户首次登录日期分组再统计留存

次日留存率不是“某天登录的人里第二天还来的比例”,而是“某天**首次**登录的用户中,第二天又活跃的比例”。漏掉“首次”这个限定,结果会严重高估——老用户反复登录会污染分母。

实操建议:

立即学习Python免费学习笔记(深入)”;

  • 先用 df.sort_values(['user_id', 'event_time']) 确保每个用户行为按时间排序
  • df.groupby('user_id')['event_time'].min() 提取每个用户的 first_login_date
  • first_login_date 合并回原表,作为后续分组依据
  • 别直接对原始登录日分组——那算的是“当日登录用户留存”,不是“新用户留存”

计算次日/7日是否活跃:用 pd.to_datetime 对齐日期再做差值比较

直接用字符串比日期、或没统一时区/格式就减时间戳,容易因精度丢失(比如 '2024-01-01 23:59:59''2024-01-02 00:00:01' 被判为跨2天)导致漏计。

实操建议:

立即学习Python免费学习笔记(深入)”;

  • event_timefirst_login_date 都转成 pd.to_datetime(...).dt.date(只留年月日)
  • (active_date - first_login_date).days 得整数天数,避免 Timedelta 单位混淆
  • 次日留存对应 days == 1,7日留存对应 days >= 1 and days (注意是“7日内至少活跃一次”,不是“第7天恰好活跃”)

聚合时别用 count() 直接除——要防分母为0和重复用户

一个新用户在次日多次打开 App,groupby().count() 会把这个人算多次,但留存只看“是否来过”,不是“来了几次”。更糟的是,如果某天没新用户,分母为0,div() 会产出 infNaN,后续画图或导出易崩。

AI改图神器
AI改图神器

AI万能图片编辑器,一键抠图,去水印,智能图片美化,照片转漫画,照片变活转视频,图片无损放大,一键背景虚化,位图智能转矢量图

下载

实操建议:

立即学习Python免费学习笔记(深入)”;

  • 对每个 first_login_date 组,用 nunique('user_id') 算分母(新用户数)
  • 分子用 df[df['days']==1]['user_id'].nunique()(次日去重用户数)
  • 最后用 .fillna(0) 替换空组的 NaN,再用 .replace([np.inf, -np.inf], 0) 清理异常值

性能卡在大表上?避免 apply 和循环,改用 merge + agg

有人写 for date in dates: df[df['first']==date].apply(...),百万级用户下跑几小时。Pandas 的向量化操作根本不需要逐天遍历。

实操建议:

立即学习Python免费学习笔记(深入)”;

  • 把新用户表(含 user_id, first_login_date)和全量行为表(含 user_id, active_date)用 merge 连接
  • 加一列 days = (active_date - first_login_date).dt.days
  • groupby('first_login_date').agg({'user_id': ['nunique', lambda x: x[x.map(lambda u: (df[df.user_id==u].days>=1)&(df[df.user_id==u].days 是错的——别这么写;正确做法是先标记每条记录是否满足次日/7日条件,再聚合
  • 更稳的写法:df['is_d1'] = (df.days == 1); df['is_d7'] = (df.days.between(1, 7)); df.groupby('first_login_date').agg(d1_retain=('is_d1', 'mean'), d7_retain=('is_d7', 'mean'))

保留住“首次登录日”这个锚点,其他全是围绕它展开的布尔标记和分组聚合。最常被跳过的一步,就是没验证 first_login_date 是否真为每人最小时间——只要有一例时间错乱,整张留存表就不可信。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Python 时间序列分析与预测
Python 时间序列分析与预测

本专题专注讲解 Python 在时间序列数据处理与预测建模中的实战技巧,涵盖时间索引处理、周期性与趋势分解、平稳性检测、ARIMA/SARIMA 模型构建、预测误差评估,以及基于实际业务场景的时间序列项目实操,帮助学习者掌握从数据预处理到模型预测的完整时序分析能力。

82

2025.12.04

Python 数据清洗与预处理实战
Python 数据清洗与预处理实战

本专题系统讲解 Python 在数据清洗与预处理中的核心技术,包括使用 Pandas 进行缺失值处理、异常值检测、数据格式化、特征工程与数据转换,结合 NumPy 高效处理大规模数据。通过实战案例,帮助学习者掌握 如何处理混乱、不完整数据,为后续数据分析与机器学习模型训练打下坚实基础。

34

2026.01.31

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

761

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

221

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1570

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

651

2023.11.24

java读取文件转成字符串的方法
java读取文件转成字符串的方法

Java8引入了新的文件I/O API,使用java.nio.file.Files类读取文件内容更加方便。对于较旧版本的Java,可以使用java.io.FileReader和java.io.BufferedReader来读取文件。在这些方法中,你需要将文件路径替换为你的实际文件路径,并且可能需要处理可能的IOException异常。想了解更多java的相关内容,可以阅读本专题下面的文章。

1269

2024.03.22

php中定义字符串的方式
php中定义字符串的方式

php中定义字符串的方式:单引号;双引号;heredoc语法等等。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

1206

2024.04.29

Nginx跨平台安装实操指南:Windows、macOS与Linux环境快速搭建
Nginx跨平台安装实操指南:Windows、macOS与Linux环境快速搭建

本指南详解Nginx在Windows、macOS及Linux系统的安装全流程。涵盖官方包解压、Homebrew一键部署、APT/YUM源配置及Docker容器化方案。无论新手或开发者,均可快速搭建运行环境,掌握跨平台核心指令,为后续配置与调优奠定坚实基础。

10

2026.03.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.5万人学习

Django 教程
Django 教程

共28课时 | 5.1万人学习

SciPy 教程
SciPy 教程

共10课时 | 2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号