You need to enable JavaScript to run this app. Python如何按连续日期分组统计用户不同活动的连续出现天数
优惠活动
大模型
产品
解决方案
定价
更多

Python如何按连续日期分组统计用户不同活动的连续出现天数

问题分析

你的代码存在三个核心问题导致结果不符合预期:

  • 未提前对数据按时间排序:原数据行顺序不是按时间升序排列的,date.diff()计算的是乱序相邻行的日期间隔,结果自然错误。
  • 判断条件错误:你使用了ne(1)(只要日期间隔不等于1就触发累加),但实际上只有日期间隔大于1天才需要开启新的连续段,同一天(间隔0天)、相邻天(间隔1天)都属于同一个连续段,不需要累加。
  • 未处理单日多条记录的场景:同一天的多条记录之间日期差为0,会被错误的ne(1)条件判定为需要累加,导致同一天的记录被分到不同的组。
修正方案

你可以先提取每个用户的唯一日期序列计算连续段编号,再映射回原数据即可,完整代码如下:

# 第一步:先按Id和时间升序排序,保证时间顺序正确
sample = sample.sort_values(['Id', 'datetime']).reset_index(drop=True)
# 第二步:提取每个Id的去重日期序列,计算连续段编号
unique_date_df = sample.drop_duplicates(['Id', 'date']).copy()
unique_date_df['Consecutive'] = unique_date_df.groupby('Id')['date'].diff().dt.days.gt(1).cumsum() + 1
# 第三步:将连续段编号映射回原数据集
sample = sample.merge(unique_date_df[['Id', 'date', 'Consecutive']], on=['Id', 'date'], how='left')

运行上述代码后得到的Consecutive字段就和你期望的输出完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 07:45:01