You need to enable JavaScript to run this app. 基于pandas与字典键实现DataFrame区域聚类时的KeyError: True报错问题
优惠活动
大模型
产品
解决方案
定价
更多

基于pandas与字典键实现DataFrame区域聚类时的KeyError: True报错问题

报错根因

KeyError: True 由两个问题共同导致:

  1. 筛选条件写法完全错误:你写的DF["subdivision_name"].any() in reference_dict[area]里,Series.any()只会返回单个全局布尔值——只要列里存在任意一个真值就返回True,根本不是逐行判断的筛选掩码。当你把这个单个布尔值传给DF[]切片时,pandas会把传入值当成列名查找,自然找不到叫True的列,直接触发KeyError。
  2. 变量名拼写不一致:你函数里校验区域合法性时写的if area in subdivision_dict,和全局定义的参考字典reference_dict名称不匹配,后续还会触发未定义变量的报错。
修复方案

逐行匹配subdivision必须用pandas自带的Series.isin()生成布尔掩码,再结合分组逻辑输出你要的带区域名、日期、汇总值的结果表。

完整可运行的代码实现

import pandas as pd

# 基础测试数据
DF_draft = pd.DataFrame(data={"subdivision_name" : ["01","02","03","04","05"], 
            "day": ["2020-03-18","2020-03-18","2020-03-18","2020-03-18","2020-03-18"],
            "data":[0,11,12,13,2]})

# 参考区域映射字典
reference_dict = {"Area Alpha": ["01","03","04","15","26","38","42","43","63","69","73","74"], 
                   "Area Beta" : ["21","25","39","58","70","71","89","90"],
                  "Area Gaga" : ["02","01","07","57","88","67","68","54"]}

def area_cluster(DF, area_name_list):
    # 校验传入的区域名是否合法
    invalid_areas = [area for area in area_name_list if area not in reference_dict]
    if invalid_areas:
        print(f"拼写错误,不存在的区域:{', '.join(invalid_areas)}")
        return None
    
    # 构造subdivision到所属区域的映射关系
    sub_to_area = {}
    for area in area_name_list:
        for sub_id in reference_dict[area]:
            sub_to_area[sub_id] = area
    
    # 筛选出属于目标区域的明细行
    matched_rows = DF[DF["subdivision_name"].isin(sub_to_area.keys())].copy()
    # 给明细行打上所属区域标签
    matched_rows["area_name"] = matched_rows["subdivision_name"].map(sub_to_area)
    
    # 按区域+日期分组,对data值求和,生成最终汇总表
    result_table = matched_rows.groupby(["area_name", "day"], as_index=False)["data"].sum()
    # 调整输出结构,和你给的示例格式对齐
    result_table = result_table.set_index("area_name").rename(columns={"data": area_name_list[0]})
    return result_table

调用测试

执行area_cluster(DF_draft, ["Area Alpha"]),输出结果完全匹配预期:

day  Area Alpha
area_name                      
Area Alpha  2020-03-18          25

计算逻辑验证:Area Alpha 匹配的subdivision为01(data=0)、03(data=12)、04(data=13),总和25,和示例结果完全一致。支持同时传入多个区域名,会自动逐行汇总每个区域的数值。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.11 16:54:03