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

如何用Pandas查询id在start事件5天窗口内是否存在b事件

实现步骤与代码

首先需要将日期列转换为可进行时间运算的datetime类型,之后按id分组处理每个用户的事件:

步骤1:数据预处理

import pandas as pd

# 把date列转为datetime格式,才能做时间差计算
df['date'] = pd.to_datetime(df['date'])

步骤2:筛选符合条件的id

提供两种简洁的实现方式:

方法一:合并起始日期后筛选

# 提取每个id对应的start事件日期
start_dates = df[df['event'] == 'start'].set_index('id')['date'].rename('start_date')
# 将起始日期合并回原数据表
df_merged = df.merge(start_dates, left_on='id', right_index=True)
# 筛选出event为b且日期在start事件后5天内的记录,提取唯一id
valid_ids = df_merged[(df_merged['event'] == 'b') & 
                      (df_merged['date'] <= df_merged['start_date'] + pd.Timedelta(days=5))]['id'].unique()

方法二:分组直接判断

# 按id分组,检查每组是否存在符合条件的b事件
valid_ids = df.groupby('id').apply(
    lambda group: 
    # 找到当前组的start日期,判断是否有b事件在5天窗口内
    (group[group['event'] == 'b']['date'] <= group[group['event'] == 'start']['date'].iloc[0] + pd.Timedelta(days=5)).any()
# 只保留判断结果为True的id
)[lambda res: res].index.tolist()

结果说明

运行上述代码后,valid_ids会得到示例数据中符合条件的id列表:['01', '03'](01的b事件在start后3天,03的b事件在start后3天,均在5天窗口内;02无b事件,04仅存在start事件)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 01:35:18