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

如何用Pandas为临界值行匹配后续值达标的对应时间?

解决Pandas临界值行后续达标时间匹配问题

处理思路

  1. 准备数据集:加载或构造包含time、value、is_critical的DataFrame,确保is_critical为布尔类型。
  2. 提取临界行:筛选出is_critical为True的记录,作为处理的基础。
  3. 匹配后续达标时间:对每一行临界值,在其之后的行中找到第一个value大于等于当前临界值的记录,提取对应的time。
  4. 整理结果:将匹配到的时间作为新列return_to_critical,保留需要的三列输出。

完整代码实现

import pandas as pd

# 构造数据集(如果数据来自本地CSV,替换为 df = pd.read_csv("你的文件路径.csv"))
data = {
    'time': ['0:00', '0:01', '0:02', '0:03', '0:04', '0:05', '0:06', '0:07', '0:08', '0:09', '0:10'],
    'value': [1, 9, 2, 4, 6, 5, 1, 4, 8, 7, 10],
    'is_critical': [False, True, False, False, True, False, False, False, True, False, False]
}
df = pd.DataFrame(data)

# 筛选所有临界值行
critical_rows = df[df['is_critical']].reset_index(drop=True)

# 初始化达标时间列
critical_rows['return_to_critical'] = None

# 遍历每个临界行,查找后续首个达标记录
for idx, critical_row in critical_rows.iterrows():
    # 获取当前临界行在原数据中的位置
    current_index = df[df['time'] == critical_row['time']].index[0]
    # 筛选当前行之后、value >= 临界值的记录
    matching_rows = df.loc[current_index + 1:][df['value'] >= critical_row['value']]
    # 如果找到匹配项,取第一个的时间
    if not matching_rows.empty:
        critical_rows.loc[idx, 'return_to_critical'] = matching_rows.iloc[0]['time']

# 保留目标列并输出
result = critical_rows[['time', 'value', 'return_to_critical']]
print(result)

代码说明

  • 数据集准备:如果数据来自本地CSV,直接替换构造数据的代码为pd.read_csv即可;构造数据的方式方便快速测试。
  • 临界行筛选:通过布尔索引直接提取is_critical为True的行,reset_index重置索引避免遍历出错。
  • 后续匹配:通过current_index定位当前临界行的位置,只查找current_index+1之后的行,确保是后续的记录;用布尔索引筛选达标行后,取第一个记录的time赋值给新列。
  • 结果整理:只保留time、value、return_to_critical三列,得到目标输出。

输出结果

执行代码后会生成与需求示例完全一致的结果:

time  value return_to_critical
0  0:01      9               0:10
1  0:04      6               0:08
2  0:08      8               0:10

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 19:50:23