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

仅坐标满足指定区间时创建year键并累加同键数值的Python实现问题

解决方案

你的原有代码问题出在初始化逻辑:只要首次碰到某一年的记录,不管该条记录是否符合经纬度要求,都会直接给g_coords注册对应年份的键,导致不符合坐标条件的年份也会出现在最终结果里。
下面给出两种可行修改方案:

方案1:保留原有循环结构(适配你要保留avg_lat逻辑的要求)

直接调整g_coords的初始化和累加逻辑,只有符合坐标条件的条目才会操作g_coords:

avg_lat = {}
g_coords = {}
for year, lat, num, long in zip(years, latitudes, quantities, longitudes):
    # 保留你需要的avg_lat逻辑不动
    if year in avg_lat:
        avg_lat[year] += lat
    else:
        avg_lat[year] = lat
    # 仅针对符合坐标条件的条目操作g_coords
    if 58.50 > lat > 56.83 and 17.83 > long > 15.26:
        if year in g_coords:
            g_coords[year] += num
        else:
            g_coords[year] = num
return g_coords

方案2:使用numpy向量化运算(数据量大时效率更高)

先筛选出所有符合坐标条件的记录,再按年份聚合求和:

import numpy as np
# 先构造符合条件的布尔掩码
mask = (latitudes > 56.83) & (latitudes < 58.50) & (longitudes > 15.26) & (longitudes < 17.83)
# 筛选符合条件的年份和对应数量
filter_years = years[mask]
filter_nums = quantities[mask]
# 按年份去重并按quantities权重统计总和
unique_years, indices = np.unique(filter_years, return_inverse=True)
counts = np.bincount(indices, weights=filter_nums).astype(int)
# 转成字典格式
g_coords = dict(zip(unique_years, counts))
# 你要保留的avg_lat逻辑如果需要保留,可以单独遍历计算即可
return g_coords

两种方案都可以保证最终g_coords里只存在有符合坐标条件记录的年份,且对应值为该年所有符合条件条目的quantity累加和。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 23:09:03