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

如何在Python DataFrame中查找满足双条件的目标第一行

解决方案

方法1:在你原有循环逻辑基础上完善

你可以在命中distance<250的条件后,从当前位置的下一位开始向后遍历,找到第一个同时满足两个条件的行就直接返回索引即可,代码示例如下:

def find_target_index(data_gpd):
    # 遍历所有行,提前预留1位防止索引越界
    for i in range(len(data_gpd) - 1):
        # 第一步:定位到和下一个点距离小于250的点
        if data_gpd.loc[i+1, 'distance'] < 250:
            # 第二步:从当前位置的下一位开始搜索符合要求的点
            for j in range(i + 1, len(data_gpd)):
                if data_gpd.loc[j, 'distance'] > 250 and data_gpd.loc[j, 'speed'] > 5:
                    return j
    # 没有匹配的结果时返回None
    return None

# 调用方法直接拿到目标索引
target_idx = find_target_index(data_gpd)

如果你想用更简洁的next写法,也可以把内层循环替换为生成器表达式,不用手动写内层循环:

def find_target_index(data_gpd):
    for i in range(len(data_gpd) - 1):
        if data_gpd.loc[i+1, 'distance'] < 250:
            # 直接取第一个符合条件的j,没匹配到就返回None
            return next((j for j in range(i+1, len(data_gpd)) 
                        if data_gpd.loc[j, 'distance']>250 and data_gpd.loc[j, 'speed']>5), 
                       None)
    return None

方法2:pandas矢量化实现(性能更高,适合数据量大的场景)

不用手写循环,直接用pandas内置的布尔索引定位,代码更简洁、执行速度更快:

def find_target_index(data_gpd):
    # 第一步:找到第一个和下一个点距离小于250的位置
    match_first = data_gpd[data_gpd['distance'].shift(-1) < 250]
    if match_first.empty:
        return None
    first_less_250 = match_first.index[0]
    # 第二步:从该位置往后筛选同时满足两个条件的行,取第一个的索引
    target = data_gpd.loc[first_less_250 + 1:]
    target = target[(target['distance'] > 250) & (target['speed'] > 5)]
    return target.index[0] if not target.empty else None

注意如果你的数据集索引不是默认从0开始的连续整数,把.index替换为.reset_index(drop=True).index调整即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 12:24:04