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

基于movement_type筛选:AR与PK时间匹配索引获取问题排查

问题排查与优化方案

循环无结果的原因

  • Datetime精度差异:尽管两列都是datetime类型,但可能存在微秒、纳秒级的隐形差异(比如一条记录是2024-05-20 12:00:00.123,另一条是2024-05-20 12:00:00),直接用in判断会因为精度不匹配返回False。
  • 索引逻辑错误:就算匹配成功,原代码打印的是df_amove_PK["start_datetime"].index,这会输出PK数据集的所有索引,而非当前AR记录匹配到的单个/多个PK索引,你可能误以为没有匹配结果。
  • 未按飞机分组匹配:场景明确是单架飞机的事件关联,但原代码没有通过acreg字段分组,跨飞机的AR和PK自然无法匹配到预期的结果。

优化方案

方案1:修正循环逻辑(保留循环思路)

先统一datetime精度,再按飞机分组匹配,同时优化查找效率:

import pandas as pd

# 统一datetime精度到秒,消除微秒差异
df_amove["end_datetime"] = df_amove["end_datetime"].dt.floor('s')
df_amove["start_datetime"] = df_amove["start_datetime"].dt.floor('s')

# 按飞机注册号分组处理,符合场景需求
for acreg, group_df in df_amove.groupby("acreg"):
    # 筛选当前飞机的AR和PK记录
    ar_records = group_df[group_df["movement_type"] == "AR"]
    pk_records = group_df[group_df["movement_type"] == "PK"]
    
    # 把PK的起始时间转成集合,提升查找速度
    pk_start_set = set(pk_records["start_datetime"])
    
    # 遍历AR记录匹配PK
    for ar_idx, ar_row in ar_records.iterrows():
        ar_end_time = ar_row["end_datetime"]
        if ar_end_time in pk_start_set:
            # 获取所有匹配的PK索引
            matched_pk_indices = pk_records[pk_records["start_datetime"] == ar_end_time].index.tolist()
            print(f"AR索引 {ar_idx} 匹配到PK索引:{matched_pk_indices}")

方案2:用Pandas Merge高效匹配(推荐)

避免循环,利用Pandas的向量化操作提升效率,同时自动处理一对多匹配:

import pandas as pd

# 统一datetime精度
df_amove["end_datetime"] = df_amove["end_datetime"].dt.floor('s')
df_amove["start_datetime"] = df_amove["start_datetime"].dt.floor('s')

# 提取AR和PK的关键数据,重命名时间列用于匹配
ar_data = df_amove[df_amove["movement_type"] == "AR"][["acreg", "end_datetime"]].reset_index()
ar_data.rename(columns={"index": "ar_index", "end_datetime": "match_time"}, inplace=True)

pk_data = df_amove[df_amove["movement_type"] == "PK"][["acreg", "start_datetime"]].reset_index()
pk_data.rename(columns={"index": "pk_index", "start_datetime": "match_time"}, inplace=True)

# 按飞机注册号+匹配时间关联,得到所有AR-PK匹配对
matched_results = pd.merge(ar_data, pk_data, on=["acreg", "match_time"], how="inner")

# 输出匹配的索引对
print("AR-PK匹配索引对:")
print(matched_results[["ar_index", "pk_index"]])

内容的提问来源于stack exchange,提问作者Hans.nl

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 03:05:19