python - 如何将数据框转换为嵌套字典?
问题描述
我正在运行 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”
请告诉我,我应该如何更改获得预期结果的代码?
解决方案
只是方法链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}}
推荐阅读
- python - Django如何将选择列表传递给自定义选择小部件
- deployment - 如何绘制部署图?
- php - 如何验证是否在jquery ajax .prop fumction()中选中了复选框?
- qt - 从一个线程写入套接字并从另一个线程读取
- java - NullPointerException,但仅当我将 Android 手机连接到计算机时
- c# - Jsreport Xlsx 列大小
- sql-server - SSIS - SSIS 挂起时的最佳实践
- php - 无法更新mysql中的列
- java - Retrofit2拦截器将特殊字符转换为Android中的问号
- python - Flask/Python - 如何以文本形式而不是列表呈现这些数据