如何使用 Pandas 高效计算每个客户的最大连续访问天数
作者:WeekendFlower
时间:2026-07-02
浏览:0
针对客户访问记录,通过Pandas将日期排序后计算相邻日期差,基于差值为1天的连续性生成分组标识,统计每个分组长度并取最大值,即可高效得到每位用户的最大连续访问天数。该方法需注意排序与日期格式显式指定,适用于电商、SaaS等领域活跃度分析。
在客户行为分析中,识别“连续访问”是评估用户活跃度的关键指标之一。给定一个包含 id(客户ID)和 visit_date(访问日期)的 DataFrame,目标是:对每个客户,找出所有连续访问区间各自的天数,并返回其中的最大值(例如客户1有 [1/2, 1/3, 1/4] 和 [1/7–1/10] 两段,对应长度 3 和 4,最终结果为 4)。
核心思路其实挺直观的:把日期序列转成时间差序列,找到那些“断点”——也就是间隔超过1天的位置,然后根据断点生成连续区间,数一数每个区间有多长,最后挑出最长的那个。怎么做到呢?Pandas的向量化操作可以一步到位,既快又简洁。
import pandas as pd
import numpy as np
# 示例数据(注意:原始日期格式需能被正确解析)
df = pd.DataFrame({
'id': [1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,4,4,4],
'visit_date': [
'1/2/2022','1/3/2022','1/4/2022','1/7/2022','1/8/2022',
'1/9/2022','1/10/2022','1/1/2022','1/2/2022','1/4/2022',
'1/6/2022','1/7/2022','1/8/2022','1/9/2022','1/10/2022',
'1/3/2022','1/4/2022','1/5/2022','1/3/2022','1/4/2022','1/8/2022'
]
})
# 步骤详解(推荐用于理解逻辑)
df['visit_date'] = pd.to_datetime(df['visit_date'], format='%m/%d/%Y') # 统一转为 datetime
df = df.sort_values(['id', 'visit_date']).reset_index(drop=True) # 必须排序!
# 构建连续组标识:当与前一行日期差 ≠ 1 天时,开启新组
df['date_diff'] = df.groupby('id')['visit_date'].diff().dt.days
df['group_id'] = df.groupby('id')['date_diff'].apply(lambda x: (x != 1).cumsum())
# 每组内计数 → 得到各连续段长度
consecutive_lengths = df.groupby(['id', 'group_id']).size().reset_index(name='length')
# 对每个客户取最大连续长度(排除单日孤立访问可选:length > 1)
result = consecutive_lengths.groupby('id')['length'].max().reset_index(name='consecutive_days')
print(result)
输出:
id consecutive_days 0 1 4 1 2 5 2 3 3 3 4 2
有几个关键点需要注意:
- 必须先按 id 和 visit_date 排序,否则 diff() 和分组逻辑就会乱套;
- 用 pd.to_datetime() 时,最好显式写上 format 参数(比如 '%m/%d/%Y'),避免系统区域设置不同导致日期解析出错;
- 如果不仅想要最大值,还想看每个客户所有连续段的情况,直接用 consecutive_lengths 这个中间结果就行;
- 数据量非常大的时候,可以考虑用更紧凑的 NumPy 向量化写法,但那样可读性会差不少,从团队协作角度,还是先用这种清晰的分步逻辑更稳妥。
这个方法的通用性很强,电商的复购分析、SaaS 的用户登录追踪、医疗的随访记录,基本都能直接套用。
作者最新文章
赤友清理大师
2026-09-16 17:43
南邮光擎智算团队:GaN基Micro-LED光计算芯片从理论到流片的突破
2026-09-08 18:35
多张照片怎么合成PDF文件?三种图片转PDF工具怎么选?
2026-09-03 17:04
Excel转PDF防乱版指南:在线与本地双方案及排版检查
2026-09-03 10:04
多个PDF怎么合并成一个?合并后顺序怎么检查?
2026-09-02 19:54
热门文章
更多
精品专题
更多
Mac软件
更多
WINDOWS
更多


































