python - Pandas - 按 3 列将分组导出到 JSON
问题描述
我有carsML
关于汽车的数据框:
+-------+-------------+--------------------+
| Manuf | Model | Type |
+-------+-------------+--------------------+
| VW | VWModel 1 | VWModel 1 Type 1 |
| VW | VWModel 2 | VWModel 2 Type 1 |
| VW | VWModel 2 | VWModel 2 Type 2 |
| Opel | OpelModel 1 | OpelModel 1 Type 1 |
| Opel | OpelModel 2 | OpelModel 2 Type 1 |
| Opel | OpelModel 2 | OpelModel 2 Type 2 |
+-------+-------------+--------------------+
我需要将唯一值导出到 JSON。我知道如何获得 2 个级别:
j = carsML.groupby('Manuf ')['Model'].unique().to_json()
这给了我很好的 JSON Manufacturers
,Models
但我不知道如何在第三级(Types
)上扩展它。
最终 JSON 应如下所示:
{"Opel":
{"OpelModel 1": ["OpelModel 1 Type 1"]},
["OpelModel 2":["OpelModel 2 Type 1","OpelModel 2 Type 1"]],
"VW":
{"VWModel 1":["VWModel 1 Type 1"]},
{"VWModel 2":["VWModel 2 Type 1","VWModel 2 Type 2"]}}
解决方案
首先MultiIndex Series
通过按 2 列分组创建,然后在字典理解嵌套字典中创建:
s = carsML.groupby(['Manuf','Model'])['Type'].unique().apply(list)
d = {l: s.xs(l).to_dict() for l in s.index.levels[0]}
从嵌套字典中json
使用:json.dumps
import json
j = json.dumps({l: s.xs(l).to_dict() for l in s.index.levels[0]})
print (j)
{"Opel": {"OpelModel 1": ["OpelModel 1 Type 1"],
"OpelModel 2": ["OpelModel 2 Type 1", "OpelModel 2 Type 2"]},
"VW": {"VWModel 1": ["VWModel 1 Type 1"],
"VWModel 2": ["VWModel 2 Type 1", "VWModel 2 Type 2"]}}
推荐阅读
- angular7 - 如何解决“不推荐使用宽度属性,使用样式定义对话框的宽度。” 警告
- mysql - MySql AWS RDS 导出到带有分隔符的 CVS
- c# - WCF 项目上的 DbContext 已更改错误
- swift - 我可以将 App 上传到使用 Xcode 10.1 和 Swift 4.2 开发的 App Store
- ruby-on-rails - rails / writing generators / 如何规范化缩进,对齐,换行......?
- unity3d - 如何获得更准确/敏感的碰撞
- java - Spring Boot 中的 classpath 和 classpath* 有什么区别?
- wordpress - 跟踪下载该插件的用户
- spring-mvc - 我收到错误 404,请求的资源不可用
- typescript - 为什么泛型参数约束添加索引签名