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

Pandas实现往返航线数据合并与航班数求和的方法

解决往返航班数据合并求和问题

问题背景

现有航班数据DataFrame:

import pandas as pd

df = pd.DataFrame({
    'ORIGIN_x':["LGA","ORD"],
    'DESTINATION_x':["ORD","LGA"],
    'number_of_flights_x':[3576,3580],
    'ORIGIN_y':["ORD","LGA"],
    'DESTINATION_y':["LGA","ORD"],
    'number_of_flights_y':[3580,3576]
})

需要合并满足ORIGIN_x=DESTINATION_y且ORIGIN_y=DESTINATION_x的往返航线,将其合并为一行并对number_of_flights_x求和,得到目标结果:

df_final = pd.DataFrame({
    'ORIGIN_x':["LGA"],
    'DESTINATION_x':["ORD"],
    'ORIGIN_y':["ORD"],
    'DESTINATION_y':["LGA"],
    'number_of_flights':[7156], # sum of 3576+3580
})

此前尝试自内连接导致行数倍增,可通过以下方法解决:

解决方案:生成标准化航线键分组聚合

核心思路是为往返航线生成唯一的标准化标识,确保同一往返航线的两条记录被归为同一组,再通过分组聚合完成合并与求和:

# 为每条航线生成标准化键:将出发地和目的地按字母排序后拼接
df['route_key'] = df.apply(lambda row: '-'.join(sorted([row['ORIGIN_x'], row['DESTINATION_x']])), axis=1)

# 按航线键分组,提取航线信息并求和航班数
df_final = df.groupby('route_key').agg(
    ORIGIN_x=('ORIGIN_x', 'first'),
    DESTINATION_x=('DESTINATION_x', 'first'),
    ORIGIN_y=('ORIGIN_y', 'first'),
    DESTINATION_y=('DESTINATION_y', 'first'),
    number_of_flights=('number_of_flights_x', 'sum')
).reset_index(drop=True)

print(df_final)

说明

  • 生成route_key时,通过sorted()对出发地和目的地排序,确保LGA-ORD和ORD-LGA的键完全一致,避免往返航线被视为不同组。
  • 分组后使用agg()方法一次性完成航线信息提取(取每组第一条记录的字段值)和航班数求和,无需自连接,彻底避免行数倍增问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 19:11:10