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
相关产品推荐
相关产品推荐

