You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python-Pandas计算客户连续到访天数的技术问题

计算客户各段连续到访天数及最长连续天数

现有一张记录客户ID和到访日期的表,部分客户存在多次连续到访、中断后再次连续到访的情况,需要计算每个客户的各段连续到访天数,同时获取每个客户的最长连续到访天数。

示例输入

id  visit_date
1   1/2/2022
1   1/3/2022
1   1/4/2022
1   1/7/2022
1   1/8/2022
1   1/9/2022
1   1/10/2022
2   1/1/2022
2   1/2/2022
2   1/4/2022
2   1/6/2022
2   1/7/2022
2   1/8/2022
2   1/9/2022
2   1/10/2022
3   1/3/2022
3   1/4/2022
3   1/5/2022
4   1/3/2022
4   1/4/2022
4   1/8/2022

参考期望输出

id  consecutive_days
1   3
1   4
2   2
2   5
3   2
4   0

解决方法(SQL实现)

核心逻辑是用窗口函数标记连续日期段,再统计每组的到访天数:

1. 标记连续日期组

按客户ID分组,对每个客户的到访日期排序,计算日期与排序序号的差值——连续的日期会得到相同的分组标识:

SELECT 
    id,
    visit_date,
    DATE_SUB(visit_date, INTERVAL ROW_NUMBER() OVER (PARTITION BY id ORDER BY visit_date) DAY) AS group_tag
FROM 
    your_table;

2. 统计各段连续到访天数

基于分组标识,按客户ID和分组标识分组统计记录数,即为该段的连续到访天数:

SELECT 
    id,
    COUNT(*) AS consecutive_days
FROM (
    SELECT 
        id,
        DATE_SUB(visit_date, INTERVAL ROW_NUMBER() OVER (PARTITION BY id ORDER BY visit_date) DAY) AS group_tag
    FROM 
        your_table
) temp
GROUP BY 
    id, group_tag
ORDER BY 
    id, consecutive_days;

执行后得到的逻辑正确分段结果:

id  consecutive_days
1   3
1   4
2   1
2   2
2   5
3   3
4   1
4   2

说明:参考期望输出中客户3的2、客户4的0不符合实际逻辑,推测为笔误。客户3连续3天到访,对应天数3;客户4有两段连续到访(2天和1天),不存在0的情况。

3. 获取每个客户的最长连续天数

如果只需每个客户的最长连续到访天数,在分段结果基础上取最大值即可:

SELECT 
    id,
    MAX(consecutive_days) AS max_consecutive_days
FROM (
    SELECT 
        id,
        COUNT(*) AS consecutive_days
    FROM (
        SELECT 
            id,
            DATE_SUB(visit_date, INTERVAL ROW_NUMBER() OVER (PARTITION BY id ORDER BY visit_date) DAY) AS group_tag
        FROM 
            your_table
    ) temp
    GROUP BY 
        id, group_tag
) temp2
GROUP BY 
    id
ORDER BY 
    id;

输出结果:

id  max_consecutive_days
1   4
2   5
3   3
4   2

内容的提问来源于stack exchange,提问作者jingchun liu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 21:47:37