首页 > 解决方案 > 如何将数据框转换为嵌套字典?

问题描述

我正在运行 Python 3.7 和 Pandas 1.1.3,并且有一个如下所示的 DataFrame:

location = {'city_id': [22000,25000,27000,35000],
        'population': [3971883,2720546,667137,1323],
        'region_name': ['California','Illinois','Massachusetts','Georgia'],
        'city_name': ['Los Angeles','Chicago','Boston','Boston'],
        }

df = pd.DataFrame(location, columns = ['city_id', 'population','region_name', 'city_name'])

我想将此数据框转换为如下所示的字典:

{
'Boston': {'Massachusetts': 27000, 'Georgia': 35000},
 'Chicago': {'Illinois': 25000},
 'Los Angeles': {'California': 22000}
}

而如果同一个城市在不同地区,嵌套的JSON应该是按人口排序的(比如波士顿在马萨诸塞州和乔治亚州。马萨诸塞州的城市更大,我们先输出。

我的代码是:

result = df = df.groupby(['city_name'])[['region_name','city_id']].apply(lambda x: x.set_index('region_name').to_dict()).to_dict()

输出:

{'Boston': {'city_id': {'Massachusetts': 27000, 'Georgia': 35000}},
 'Chicago': {'city_id': {'Illinois': 25000}},
 'Los Angeles': {'city_id': {'California': 22000}}}

你怎么能看到字典添加键 - “city_id”

请告诉我,我应该如何更改获得预期结果的代码?

标签: pythonjsonpandasdataframe

解决方案


只是方法链apply()方法到您当前的解决方案:

result=df.groupby(['city_name'])[['region_name','city_id']].apply(lambda x: x.set_index('region_name').to_dict()).apply(lambda x:list(x.values())[0]).to_dict()

现在,如果您打印result,您将获得预期的输出:

{'Boston': {'Massachusetts': 27000, 'Georgia': 35000},
 'Chicago': {'Illinois': 25000},
 'Los Angeles': {'California': 22000}}

推荐阅读