根据其他 2 列对 df 列进行分组

问题描述 投票:0回答:1

我有一个 df,它有 3 列,可以说 Region、Country 和 AREA_CODE。

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

我想获得每个区域下每个国家/地区的 AREA_CODE 列表等输出,并以“ALL”作为列表值。类似的东西

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

到目前为止,我已尝试按地区和国家/地区列进行分组,然后尝试按 AREA_CODE 对其进行分组和聚合,但它抛出错误

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

有人可以帮我解决这个问题吗?

谢谢,

python python-3.x pandas
1个回答
0
投票

为了获得额外级别的字典嵌套,您需要执行额外的

groupby

这在字典理解中最容易完成:

out = {k: {k2: ['ALL']+sorted(v2.unique().tolist())
           for k2, v2 in v.groupby('Country')['AREA_CODE']
          }
       for k, v in df.drop_duplicates().groupby('Region')
      }

输出:

{'AMER': {'CANADA': ['ALL', 'A1'],
          'US': ['ALL', 'A1', 'B1'],
         },
}
© www.soinside.com 2019 - 2024. All rights reserved.