按AC分组累计时长并关联查询油料数据的实现问询
实现方案(基于Pandas)
步骤1:分组累计时间并记录日期范围
首先对第一张表按ac分组,每组按flight_date排序后累计Total_time,直到总和超过2400或遍历完所有数据:
import pandas as pd # 假设第一张表名为df_flight,字段包括ac、Total_time、flight_date ac_time_summary = {} for ac, group in df_flight.groupby('ac'): # 按日期升序排序,保证累计顺序正确 sorted_group = group.sort_values('flight_date', ascending=True) cumulative_time = 0 dates = [] for _, row in sorted_group.iterrows(): cumulative_time += row['Total_time'] dates.append(row['flight_date']) if cumulative_time >= 2400: break ac_time_summary[ac] = { 'total_time': cumulative_time, 'min_date': min(dates), 'max_date': max(dates) }
步骤2:查询第二张表并统计油耗总和
遍历上述结果,对每个ac用日期范围查询第二张表(假设名为df_oil,字段包括ac、Total_OIL、record_date),计算Total_OIL的总和:
ac_oil_total = {} for ac, info in ac_time_summary.items(): # 筛选符合日期范围的记录 mask = (df_oil['ac'] == ac) & \ (df_oil['record_date'] >= info['min_date']) & \ (df_oil['record_date'] <= info['max_date']) oil_sum = df_oil.loc[mask, 'Total_OIL'].sum() ac_oil_total[ac] = oil_sum
步骤3:计算比值并生成结果字典
将油耗总和与累计时间的比值存入字典:
result_dict = {ac: ac_oil_total[ac] / ac_time_summary[ac]['total_time'] for ac in ac_time_summary.keys()}
关键注意事项
- 必须对每组数据按
flight_date排序,否则累计顺序错误会导致日期范围和总和不准确 - 若累计时间不足2400,直接使用所有数据的总和和日期范围
- 确保两张表的日期字段格式一致(均为datetime类型),避免筛选错误
内容的提问来源于stack exchange,提问作者Hygor
相关产品推荐
相关产品推荐

