python - Pandas - 将 3 列分组导出到 JSON

标签 python pandas

我有关于汽车的 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()

这为我提供了 ManufacturersModels 的漂亮 JSON,但我不知道如何在第三层扩展它(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"]}}

最佳答案

首先通过按 2 列分组来创建 MultiIndex Series,然后在字典理解中创建嵌套字典:

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"]}}

关于python - Pandas - 将 3 列分组导出到 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59918296/

相关文章:

python - pandas 的 "pivot"操作的精确逆运算

python - 如何提取具有给定值序列的 2 个后续列的行?

python - 对 Pandas 时间戳列进行分箱

python - 使用 Python 的每小时频率计数

python - tkinter( python ): assign class method to a key

python - 为什么 subprocess.Popen 阻塞?

python - 将 Pandas DataFrame 列转换为行

python - Django:缺少 ManagementForm 数据...Formset 将无法验证。为什么?

pandas - 可变大小滚动窗口回归

python - 通过链式将总和列添加回 pandas 数据框