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

