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

如何在pandas DataFrame中获取用户最近一次活跃日期(含间隔非活跃日场景)

实现方案

核心逻辑是先提取所有活跃日期,通过前向填充把非活跃行的日期替换为最近一次活跃日期,再取上一行值即可得到预期的prev_date。

前置准备

先确保date列为日期类型,且数据集按用户id、日期升序排序:

import pandas as pd

# 日期转datetime格式,避免排序异常
df['date'] = pd.to_datetime(df['date'], format='%d-%m-%Y')
# 按用户+日期排序
df = df.sort_values(['id', 'date'])

核心代码

# 临时列:仅保留活跃日的日期,非活跃日设为空值
df['temp_active_dt'] = df['date'].where(df['active'] == 1)
# 按用户分组,对临时列做前向填充,把非活跃行填充为最近一次活跃日期
df['temp_active_dt'] = df.groupby('id')['temp_active_dt'].ffill()
# 下移一行得到上一次活跃日期,即所需的prev_date
df['prev_date'] = df.groupby('id')['temp_active_dt'].shift(1)
# 可选:删除临时列
df = df.drop(columns=['temp_active_dt'])

结果验证

执行后prev_date的输出和你给出的示例完全一致:

  • 用户首次活跃前无记录,prev_date为NaN
  • 活跃日的prev_date取上一次活跃的日期
  • 非活跃日的prev_date保持最近一次活跃的日期不变

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 07:09:02