Pandas按多个列进行分组,以获得一个多层嵌套的Json。
Pandas按多个列进行分组,以获得一个多层嵌套的Json。
我有一个如下所示的数据框:
Lvl1 lvl2 lvl3 lvl4 lvl5 x 1x 3xx 1 "text1" x 1x 3xx 2 "text2" x 1x 3xx 3 "text3" x 1x 4xx 4 "text4" x 2x 4xx 5 "text5" x 2x 4xx 6 "text6" y 2x 5xx 7 "text7" y 3x 5xx 8 "text8" y 3x 5xx 9 "text9" y 3x 6xx 10 "text10" y 4x 7xx 11 "text11" y 4x 7xx 62 "text12" y 4x 8xx 62 "text13" z z z w w w 我想要将其转换为嵌套的JSON,使其看起来像这样: [{ "x":{ "1x":[{ "3xx": [ { lvl4: 1 lvl5: "text1" }, { lvl4: 2 lvl5: "text2" }, { lvl4: 3 lvl5: "text3" }], "4xx": [ { lvl4: 4 lvl5: "text4" }], "2x":[{ "4xx": [ { lvl4: 5 lvl5: "text5" }, { lvl4: 6 lvl5: "text6" }], "5xx": [ { lvl4: 7 lvl5: "text7" }], }]
.
.
.
我正在使用这里的示例作为起点,但我需要将lvl1,lvl2和lvl3缩进,就像示例数据中显示的那样。参考示例将lvl1,lvl2和lvl3返回到同一级别。
此外,我需要lvl的键是lvl的值,例如"x"而不是"lvl1"。
[{ "x":{
谢谢您。
Pandas多列分组以获取多层嵌套的Json的原因是需要将数据按照多个列进行分组,并将分组后的数据转化为多层嵌套的Json格式。解决方法是使用多个嵌套的groupby函数和to_dict函数实现。以下是解决方法的具体实现代码:
df['lvl5'] = df['lvl5'].str.strip('"') test = [df.groupby('Lvl1')\ .apply(lambda x: x.groupby('lvl2')\ .apply(lambda x: [x.groupby('lvl3') .apply(lambda x: x[['lvl4','lvl5']].to_dict('r') ).to_dict()] ).to_dict() ).to_dict()] import json json_res = list(map(json.dumps, test))
上述代码将数据按照'Lvl1'、'lvl2'和'lvl3'三个列进行分组,并将分组后的数据转化为字典的形式。然后使用json.dumps函数将字典转化为Json格式的字符串。最后将Json格式的字符串存储到文件中。
需要注意的是,使用`list(map(json.dumps, test))`函数将整个字典包装在一个单引号中,使其成为一个字符串。如果需要将结果保存为json格式的文件,则可以使用以下代码:
with open('data.json', 'w') as f: json.dump(test, f)
这样可以将`test`保存为双引号的json格式。