मेरे पास कारों के बारे में 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()

जो मुझे Manufacturers और Models के लिए अच्छा 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"]}}
1
Harvey 26 जिंदा 2020, 15:24

1 उत्तर

सबसे बढ़िया उत्तर

पहले 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"]}}
1
jezrael 26 जिंदा 2020, 12:34