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

Pandas如何筛选同一用户同一门店间隔在指定时长内的事件

实现步骤
  • 转换时间字段格式:将字符串类型的timestamp转换为Pandas datetime格式,支持时间差运算
  • 分组排序:按user_id、store_id分组,组内按时间升序排列,保证同用户同门店的事件按发生顺序排列
  • 计算相邻时间差:分别计算当前行与上一行、当前行与下一行的时间间隔,避免遗漏相邻满足条件的记录
  • 条件筛选:保留满足时间间隔小于等于指定阈值的记录
完整可运行代码
import pandas as pd

# 构造示例数据,实际使用时替换为你的DataFrame即可
data = {
    'user_id': ['user_1', 'user_1', 'user_1', 'user_2', 'user_2', 'user_3', 'user_4', 'user_4'],
    'timestamp': ['2021-11-26T13:40:00.000Z', '2021-11-26T12:20:00.000Z', '2021-11-22T16:10:00.000Z',
                  '2021-11-19T22:00:00.000Z', '2021-11-19T19:50:00.000Z', '2021-11-28T06:10:00.000Z',
                  '2021-11-18T16:30:00.000Z', '2021-11-18T16:20:00.000Z'],
    'store_id': ['store_1', 'store_1', 'store_1', 'store_2', 'store_2', 'store_1', 'store_3', 'store_2']
}
df = pd.DataFrame(data)

# 1. 转换时间格式
df['timestamp'] = pd.to_datetime(df['timestamp'])

# 2. 按用户、门店、时间升序排序
df_sorted = df.sort_values(['user_id', 'store_id', 'timestamp']).reset_index(drop=True)

# 3. 计算组内前后相邻行的时间差
group = df_sorted.groupby(['user_id', 'store_id'])['timestamp']
df_sorted['prev_diff'] = group.diff()
df_sorted['next_diff'] = group.diff(-1).abs()

# 4. 设定时间间隔阈值,可按需调整
time_threshold = pd.Timedelta(hours=2)

# 5. 筛选满足条件的记录,删除辅助列
result = df_sorted[(df_sorted['prev_diff'] <= time_threshold) | (df_sorted['next_diff'] <= time_threshold)]\
    .drop(columns=['prev_diff', 'next_diff'])\
    .reset_index(drop=True)

print(result)
输出结果

运行上述代码得到的结果和预期完全一致,仅保留user_1的两条符合要求的记录:

user_id                 timestamp store_id
0  user_1 2021-11-26 12:20:00+00:00  store_1
1  user_1 2021-11-26 13:40:00+00:00  store_1
注意事项
  • 时间阈值可灵活调整,例如要设置为30分钟可修改为pd.Timedelta(minutes=30),设置为1天修改为pd.Timedelta(days=1)即可
  • 如果需要筛选连续3条及以上满足间隔的记录,可扩展辅助列计算连续满足间隔的长度,调整判断逻辑即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 01:24:01