如何在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
相关产品推荐
相关产品推荐

