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

基于DataFrame的Region与Country列分组汇总AREA_CODE并添加ALL值

问题描述

现有一个包含Region、Country、AREA_CODE三列的DataFrame,数据示例如下:

Region      Country     AREA_CODE
===================================
AMER       US             A1
AMER       CANADA         A1
AMER       US             B1
AMER       US             A1

期望得到按Region分组,每个Region下再按Country分组的嵌套字典,每个Country对应的值为包含'ALL'及该国家唯一AREA_CODE的排序后列表,目标输出如下:

{
  "AMER": {
            "US": ["ALL", "A1", "B1"],
            "CANADA": ["ALL", "A1"]
          }
}

尝试了以下代码但报错:

df.drop_duplicates().groupby(["Region", "Country"]).groupby("Country")['AREA_CODE'].agg(lambda x: ["ALL"]+sorted(x.unique().tolist())).to_dict()

解决方案

你的代码错误在于在两级分组后再次嵌套groupby("Country"),属于多余且逻辑错误的操作。正确实现思路如下:

  1. 先去除重复的区域-国家-区号组合(减少后续计算量)
  2. 按Region和Country进行两级分组,对每组的AREA_CODE去重、排序后添加'ALL'
  3. 将分组结果转换为目标嵌套字典结构

正确代码

# 精准去除重复的区域-国家-区号组合
df_unique = df.drop_duplicates(subset=["Region", "Country", "AREA_CODE"])

# 分组处理并转换为嵌套字典
result = df_unique.groupby(["Region", "Country"])["AREA_CODE"].agg(
    lambda x: ["ALL"] + sorted(x.unique().tolist())
).unstack().to_dict("index")

print(result)

代码说明

  • drop_duplicates(subset=["Region", "Country", "AREA_CODE"]):仅保留唯一的区域-国家-区号组合,避免重复计算
  • groupby(["Region", "Country"]):按区域、国家进行两级分组,确保每组对应一个国家的所有唯一区号
  • agg(lambda x: ["ALL"] + sorted(x.unique().tolist())):对每组区号去重、排序后,在列表开头添加'ALL'
  • unstack():将两级分组的结果转换为宽表,让Country成为列名
  • to_dict("index"):将宽表转换为以Region为外层键、国家-区号列表为内层字典的嵌套结构

运行后即可得到符合期望的输出结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 15:57:08