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

Python for循环追加列表后统计唯一值出现次数问题

代码错误原因
  • 核心错误是打印目标错误:Counter(crime_list)仅临时生成了统计对象,未赋值给任何变量;后续执行print(Counter)打印的是Counter类本身,而非统计结果,因此会重复输出<class 'collections.Counter'>。
  • 两层循环复用row作为迭代变量名,存在变量覆盖的隐患。
  • 全局crime_list在外层每轮循环中都重复执行无赋值的Counter计算,逻辑冗余;且未给无周边案件的商户初始化计数,会导致0案件商户从结果中缺失。
  • 预先定义的crime_number列表全程未使用,也未实现最终输出两列DataFrame的需求。
可直接运行的修正代码
import pandas as pd
from geopy.distance import geodesic
from collections import Counter

# 初始化计数器
crime_counter = Counter()

# 外层遍历汽修商户,迭代变量单独命名避免覆盖
for shop in autorepair_df.itertuples():
    shop_name = shop.name
    shop_loc = (shop.lat, shop.lon)
    # 初始化当前商户的案件数为0,保证无案件商户也能出现在结果中
    crime_counter[shop_name] = 0

    # 内层遍历犯罪案件记录
    for case in parts_and_vehicle_theft.itertuples():
        case_loc = (case.GEO_LAT, case.GEO_LON)
        if geodesic(shop_loc, case_loc).mi <= 0.25:
            crime_counter[shop_name] += 1

# 转换为要求的两列DataFrame
result_df = pd.DataFrame(
    crime_counter.items(),
    columns=["汽修店名称", "周边犯罪计数"]
)

# 输出结果验证
print(result_df)
补充提示
  • 如果数据集规模较大(例如商户、案件记录均超过千条),双重循环的O(n*m)时间复杂度会导致运行速度极慢。可以将坐标转换为平面投影坐标系后,用空间索引(如R树、KDTree)做半径匹配,运行效率能提升数十到数百倍。
  • 如果存在同名汽修店,建议使用数据集里的商户唯一ID作为统计键,避免重名引发计数合并错误。

内容的提问来源于stack exchange,提问作者Dylan Vowell

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 05:00:45