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

基于城市映射字典合并Pandas行列并求和(机场转城市航班数)

如何用Pandas将机场航班数据合并为城市级汇总(行/列合并求和)

哈哈,这个需求太常见了——从机场粒度汇总到城市粒度,用Pandas完全可以轻松搞定!核心就是靠你手里的那个城市-机场字典,把每个机场映射到对应的城市,然后分组求和就行。我给你一步步讲明白:

步骤1:先把城市-机场字典反转成「机场→城市」的映射

你手里的字典是城市为键、对应机场列表为值,我们需要先把它转成每个机场对应所属城市的字典,这样才能快速给DataFrame的行和列做映射。比如:

# 假设你的城市-机场字典长这样
city_airports = {
    "北京": ["PEK", "NAY"],
    "上海": ["PVG", "SHA"],
    "广州": ["CAN"],
    "深圳": ["SZX"]
}

# 反转成机场到城市的映射
airport_to_city = {airport: city for city, airports in city_airports.items()}

步骤2:合并行(按出发城市分组求和)

假设你的DataFrame行索引是出发机场代码,我们先把索引替换成对应的城市,然后按城市分组求和,这样同属一个城市的所有出发机场的航班数就会被合并:

# 把行索引映射为城市
df.index = df.index.map(airport_to_city)
# 按行的城市分组,对所有列求和
df = df.groupby(level=0).sum()

步骤3:合并列(按到达城市分组求和)

同理,DataFrame的列是到达机场代码,用同样的逻辑处理列,就能合并同一城市的到达机场数据:

# 把列名映射为城市
df.columns = df.columns.map(airport_to_city)
# 按列的城市分组,对所有行求和
df = df.groupby(axis=1, level=0).sum()

完整示例演示

给你一个可直接运行的完整例子,方便你对照:

import pandas as pd

# 1. 定义城市-机场映射字典
city_airports = {
    "北京": ["PEK", "NAY"],
    "上海": ["PVG", "SHA"],
    "广州": ["CAN"]
}
airport_to_city = {airport: city for city, airports in city_airports.items()}

# 2. 创建示例航班交叉表(行=出发机场,列=到达机场,值=航班数量)
flight_data = {
    "PEK": [0, 12, 8],
    "NAY": [0, 5, 3],
    "PVG": [15, 0, 10],
    "SHA": [7, 0, 4],
    "CAN": [9, 11, 0]
}
df = pd.DataFrame(flight_data, index=["PEK", "NAY", "PVG", "SHA", "CAN"])

# 3. 合并行(出发城市)
df.index = df.index.map(airport_to_city)
df = df.groupby(level=0).sum()

# 4. 合并列(到达城市)
df.columns = df.columns.map(airport_to_city)
df = df.groupby(axis=1, level=0).sum()

# 查看结果
print(df)

运行后得到的结果就是城市之间的航班总数量啦!

小提示:处理未匹配的机场

如果你的DataFrame里有不在字典中的机场,可以用get()方法设置默认值,避免报错:

# 把未匹配的机场归为"其他"类别
df.index = df.index.map(lambda x: airport_to_city.get(x, "其他"))

内容的提问来源于stack exchange,提问作者Lorcán

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:42:30