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

大型航班数据集Pandas处理报错及需求实现问题

解决方案

首先确保两个DataFrame能通过**航班标识字段(比如acreg)**关联,且df_fpu按航班和时间排序,这是后续高效处理的基础。以下是适配大数据集的向量化解法:

步骤1:预处理df_fpu

先对df_fpu按航班标识和datetime排序,保证时间序列的连续性:

# 假设航班标识为acreg,可根据实际字段调整
df_fpu = df_fpu.sort_values(['acreg', 'datetime']).reset_index(drop=True)

步骤2:标记连续5行满足条件的起始位置

用滑动窗口(window=5)检查每个窗口内的fpu_A是否全部大于100,生成标记列valid_window:

import pandas as pd

# 按航班分组,对每组计算滑动窗口的全满足结果
df_fpu['valid_window'] = df_fpu.groupby('acreg')['fpu_A'].rolling(window=5, min_periods=5).apply(lambda x: all(x > 100)).reset_index(drop=True)

min_periods=5确保只有完整的5行窗口才会被计算,避免边缘不完整窗口干扰结果。

步骤3:提取每个航班的首个有效datetime

对每个航班分组,筛选出第一个valid_window为True的行,提取其datetime作为该航班的目标起始时间:

# 提取每个航班的首个符合条件的时间
first_valid = df_fpu[df_fpu['valid_window']].groupby('acreg')['datetime'].first().reset_index(name='start')

步骤4:合并到df并处理NaN

用左连接将结果合并到df,即使某个航班没有符合条件的记录,start列会自动填充NaN,彻底避免KeyError:

df = df.merge(first_valid, on='acreg', how='left')

关于KeyError: '[nan] not in index'的说明

这个报错大概率是因为你之前的代码尝试用包含NaN的航班标识去匹配索引,或是分组时出现了NaN分组。上面的左连接方式会自动处理无匹配的情况,不会触发索引错误。

如果你的航班标识是多字段组合(比如stand+acreg),只需将分组和合并的字段替换为组合键即可,示例如下:

# 生成多字段组合键
df_fpu['flight_key'] = df_fpu['stand'] + '_' + df_fpu['acreg']
df['flight_key'] = df['stand'] + '_' + df['acreg']

# 后续操作替换为组合键
df_fpu = df_fpu.sort_values(['flight_key', 'datetime']).reset_index(drop=True)
df_fpu['valid_window'] = df_fpu.groupby('flight_key')['fpu_A'].rolling(window=5, min_periods=5).apply(lambda x: all(x > 100)).reset_index(drop=True)
first_valid = df_fpu[df_fpu['valid_window']].groupby('flight_key')['datetime'].first().reset_index(name='start')
df = df.merge(first_valid, on='flight_key', how='left').drop('flight_key', axis=1)

内容的提问来源于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.23 04:56:59