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

如何用Pandas高效获取各用户对应通知日期前的历史最大活跃日期?

需求说明

我们有一张用户旅程数据表,结构如下:

notification_date | user_id | login_date 
2020-01-01         | 1       | null
2020-03-01         | 1       | 2020-03-05
2020-03-10         | 1       | null
2020-03-11         | 1       | 2020-03-11

需要为每条记录添加last_active_date列,规则如下:

  • 该列展示对应notification_date之前(含当日)用户的最大login_date
  • 若login_date晚于当前notification_date则不计入

期望结果如下:

notification_date | user_id | login_date  | last_active_date
2020-01-01         | 1       | null        | null
2020-03-01         | 1       | 2020-03-05  | null
2020-03-10         | 1       | null        | 2020-03-05
2020-03-11         | 1       | 2020-03-11  | 2020-03-11

请问如何用Pandas高效地按user_id实现这一需求?


Pandas实现方案

可以通过以下步骤高效完成需求:

  1. 统一日期类型:将notification_date和login_date转换为datetime类型,避免字符串比较的误差
  2. 过滤有效登录记录:仅保留login_date不晚于当前notification_date的登录日期,无效项标记为时间空值NaT
  3. 分组计算滚动最大值:按user_id分组后,用滚动窗口计算截止到当前记录的最大有效登录日期

具体代码如下:

import pandas as pd

# 构造示例数据
data = {
    'notification_date': ['2020-01-01', '2020-03-01', '2020-03-10', '2020-03-11'],
    'user_id': [1, 1, 1, 1],
    'login_date': [None, '2020-03-05', None, '2020-03-11']
}
df = pd.DataFrame(data)

# 转换日期列为datetime类型
df['notification_date'] = pd.to_datetime(df['notification_date'])
df['login_date'] = pd.to_datetime(df['login_date'])

# 生成有效登录日期:仅保留符合时间要求的登录记录
df['valid_login'] = df.apply(
    lambda x: x['login_date'] if pd.notna(x['login_date']) and x['login_date'] <= x['notification_date'] else pd.NaT,
    axis=1
)

# 按用户分组,计算滚动最大值(从第一条记录到当前记录的最大有效登录日期)
df['last_active_date'] = df.groupby('user_id')['valid_login'].expanding().max().reset_index(level=0, drop=True)

# 可选:删除中间辅助列
df = df.drop('valid_login', axis=1)

print(df)

代码说明

  • 日期类型转换:确保日期列是datetime类型,才能正确进行时间大小比较
  • 有效登录过滤:逐行判断登录日期是否符合时间要求,不符合的标记为NaT,不参与后续最大值计算
  • 滚动最大值计算:expanding().max()会对每个用户的历史记录(从第一条到当前条)计算最大值,完美匹配“截止到当前通知日期的最大有效登录日期”的需求
  • 该方法时间复杂度为线性O(n),分组后线性处理数据,对大数据量也能保持高效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 08:45:34