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

Pandas如何基于道路表数据汇总计算城市表各城市的净流量

问题根因

你写的代码返回NaN的核心原因是索引对齐不匹配:

  • roads.groupby('to_city')和roads.groupby('from_city')返回的Series,索引是城市名称
  • 你初始化的cities默认使用0、1、2作为行索引,city_name仅为普通列,二者索引无法对应,算术运算时匹配失败的位置就会生成NaN。

如果要保留你原有的计算逻辑,只需要调整索引对齐逻辑,同时处理无流量城市的默认值即可。

解决代码

import pandas as pd

# 示例数据初始化
cities = pd.DataFrame({
    'city_name':   ['chicago', 'new_york', 'los_angeles'],
    'net_traffic': [0, 0, 0]
})

roads = pd.DataFrame({
    'from_city': ['chicago', 'chicago', 'new_york'], 
    'to_city':   ['new_york', 'los_angeles', 'los_angeles'],
    'traffic_cars_per_hour': [10, -10, 5]
})

# 核心处理逻辑
# 1. 将cities的索引设置为city_name,和groupby结果的索引对齐
cities = cities.set_index('city_name')

# 2. 计算城市总流入、总流出
in_total = roads.groupby('to_city')['traffic_cars_per_hour'].sum()
out_total = roads.groupby('from_city')['traffic_cars_per_hour'].sum()

# 3. 计算净流量,fill_value=0表示无对应流量时默认按0计算,避免NaN
cities['net_traffic'] = cities['net_traffic'].add(in_total, fill_value=0).sub(out_total, fill_value=0)

# 可选:如果需要把city_name从索引变回普通列,执行reset_index
cities = cities.reset_index()

输出结果

运行后cities的输出和你期望的完全一致:

city_name  net_traffic
0      chicago            0
1     new_york            5
2  los_angeles           -5

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 20:45:06