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

如何用Pandas识别各团队每行7秒内是否存在event=2的记录

问题描述

我有如下格式的DataFrame:

data = {'event': [1, 1, 3, 2, 3, 1, 2, 3, 4, 5], 'team': ['A', 'A', 'B', 'A', 'B', 'C', 'C', 'C', 'D', 'D'], 'timeStamp': ['2023-07-23 14:57:13.357', '2023-07-23 14:57:14.357', '2023-07-23 14:57:15.357', '2023-07-23 14:57:16.357', '2023-07-23 14:57:20.357', '2023-07-23 14:57:13.357', '2023-07-23 14:57:18.357', '2023-07-23 14:57:23.357', '2023-07-23 14:57:23.357', '2023-07-23 14:57:25.357']}

需要为每个团队的每一行数据,判断该行的timeStamp之后7秒内是否存在event为2的行,期望输出如下:

eventteamtimeStampis_2_in_7_sec
1A2023-07-23 14:57:13.357TRUE
1A2023-07-23 14:57:14.357TRUE
3B2023-07-23 14:57:15.357FALSE
2A2023-07-23 14:57:16.357FALSE
3B2023-07-23 14:57:20.357FALSE
1C2023-07-23 14:57:13.357TRUE
2C2023-07-23 14:57:18.357FALSE
3C2023-07-23 14:57:23.357FALSE
4D2023-07-23 14:57:23.357FALSE
5D2023-07-23 14:57:25.357FALSE

这个需求在R中实现较为容易,但我在Python中遇到了瓶颈。

Python实现方案

可以用pandas结合时间处理完成需求,步骤如下:

  1. 转换timeStamp列为可计算的datetime类型
  2. 按团队分组,提取每个团队内所有event=2的时间点
  3. 逐行判断当前时间之后7秒内是否存在符合条件的时间点,生成结果列

完整代码如下:

import pandas as pd

# 构建DataFrame
data = {'event': [1, 1, 3, 2, 3, 1, 2, 3, 4, 5], 'team': ['A', 'A', 'B', 'A', 'B', 'C', 'C', 'C', 'D', 'D'], 'timeStamp': ['2023-07-23 14:57:13.357', '2023-07-23 14:57:14.357', '2023-07-23 14:57:15.357', '2023-07-23 14:57:16.357', '2023-07-23 14:57:20.357', '2023-07-23 14:57:13.357', '2023-07-23 14:57:18.357', '2023-07-23 14:57:23.357', '2023-07-23 14:57:23.357', '2023-07-23 14:57:25.357']}
df = pd.DataFrame(data)

# 转换时间列为datetime类型
df['timeStamp'] = pd.to_datetime(df['timeStamp'])

# 定义分组处理函数
def check_event_2(group):
    # 获取当前团队所有event=2的时间点
    event_2_times = group[group['event'] == 2]['timeStamp']
    # 判断每行时间之后7秒内是否存在event=2的记录
    group['is_2_in_7_sec'] = group['timeStamp'].apply(
        lambda t: any((event_2_times > t) & (event_2_times <= t + pd.Timedelta(seconds=7)))
    )
    # 转换为大写的TRUE/FALSE匹配输出格式
    group['is_2_in_7_sec'] = group['is_2_in_7_sec'].map({True: 'TRUE', False: 'FALSE'})
    return group

# 按团队分组处理数据
result_df = df.groupby('team', group_keys=False).apply(check_event_2)

# 输出结果
print(result_df)

代码说明

  • pd.to_datetime:将字符串时间转为pandas可计算的datetime对象,是时间比较的基础
  • groupby('team').apply:确保只在同一团队内进行时间判断,避免跨团队干扰
  • pd.Timedelta(seconds=7):生成7秒的时间间隔,用于界定判断范围
  • any(...):检查当前行时间之后的7秒窗口内是否存在event=2的记录,最后转换为大写字符串匹配期望输出

运行代码后得到的结果与需求输出完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 08:24:57