Pandas按多个列进行分组,以获得一个多层嵌套的Json。

17 浏览
0 Comments

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":{

谢谢您。

0
0 Comments

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格式。

0