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

如何筛选On Hold Begins事件及后续紧邻事件并重构DataFrame

生成包含On Hold Begins及其紧邻后续事件的DataFrame

我来帮你搞定这个需求,用Pandas就能轻松实现。假设你的原始数据已经是按时间顺序排列的DataFrame(列名比如Event、Timestamp、Deviation),我们可以分步骤处理:

步骤1:为每个On Hold Begins事件划分组

首先,我们需要把每个以On Hold Begins开头的事件片段单独分组,这样能方便我们只处理符合要求的片段(排除前两行非On Hold Begins开头的部分):

import pandas as pd

# 假设你的原始数据存储在df中
df['group_id'] = (df['Event'] == 'On Hold Begins').cumsum()

这行代码会给每个On Hold Begins事件分配一个递增的组ID,所有在两个On Hold Begins之间的事件会被归到同一个组里,而前两行非On Hold Begins的事件会被分到group_id=0的组中。

步骤2:筛选每个组的前两行(On Hold Begins + 紧邻后续事件)

接下来,我们只保留每个组的前两行——第一行是On Hold Begins,第二行就是它的紧邻后续事件:

# 提取每个组的前两行数据
grouped_data = df.groupby('group_id').head(2)

步骤3:将两行数据合并为一行,整理成目标格式

现在我们把每个组的两行数据合并成一行,分别提取On Hold Begins和后续事件的时间戳、偏差值:

# 聚合每个组的数据,生成目标列
result_df = grouped_data.groupby('group_id').agg(
    on_hold_timestamp=('Timestamp', lambda x: x.iloc[0]),
    on_hold_deviation=('Deviation', lambda x: x.iloc[0]),
    next_event=('Event', lambda x: x.iloc[1] if len(x) >= 2 else None),
    next_timestamp=('Timestamp', lambda x: x.iloc[1] if len(x) >= 2 else None),
    next_deviation=('Deviation', lambda x: x.iloc[1] if len(x) >= 2 else None)
).reset_index(drop=True)

# 排除没有后续事件的On Hold Begins行(比如最后一行是On Hold Begins的情况)
result_df = result_df.dropna(subset=['next_event'])

# 排除前两行所在的group_id=0的组
result_df = result_df[result_df['on_hold_timestamp'].isin(df[df['Event'] == 'On Hold Begins']['Timestamp'])]

最终结果说明

处理后的result_df会包含以下列:

  • on_hold_timestamp:On Hold Begins事件的时间戳
  • on_hold_deviation:On Hold Begins事件的偏差值
  • next_event:紧邻On Hold Begins的后续事件名称(比如Below Threshold、Stage Enabled)
  • next_timestamp:后续事件的时间戳
  • next_deviation:后续事件的偏差值

而且自动排除了前两行非On Hold Begins开头的片段,完全符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:07:45