将Pandas Dataframe转换为多层嵌套JSON

迈克·克拉克

我有一个数据框,我需要将其转换为嵌套的json格式。我可以完成一个分组级别,但是我不知道如何进行第二个分组以及在其下的嵌套。

我看了很多不同的示例,但是没有什么能真正吸引我下面发布的示例。

import pandas as pd

data= {'Name': ['TEST01','TEST02'],
       'Type': ['Tent','Tent'],
       'Address':['123 Happy','456 Happy'],
       'City':['Happytown','Happytown'],
       'State': ['WA','NY'],
       'PostalCode': ['89985','85542'],
       'Spot' : ['A','A'],
       'SpotAssigment' : ['123','456'],
       'Cost': [900,500]
        }

df = pd.DataFrame(data)

j = (df.groupby(['Name','Type'])
             .apply(lambda x: x[['Address','City', 'State', 'PostalCode']].to_dict('r'))
              .reset_index(name='addresses')
             .to_json(orient='records'))


print(json.dumps(json.loads(j), indent=2, sort_keys=True))

我希望它看起来像下面的样子。

[
  {
    "Name": "TEST01",
    "Type": "Tent",
    "addresses": [
      {
        "Address": "123 Happy",
        "City": "Happytown",
        "PostalCode": "89985",
        "State": "WA"
      }
    ],
     "spots":[
              {"Spot":'A',
               "SpotAssignments":[
                      "SpotAssignment":"123",
                      "Cost":900
                          ]
              }
              ]
  },
  {
    "Name": "TEST02",
    "Type": "Tent",
    "addresses": [
      {
        "Address": "456 Happy",
        "City": "Happytown",
        "PostalCode": "85542",
        "State": "NY"
      }
     ],
     "spots":[
              {"Spot":'A',
               "SpotAssignments":[
                      "SpotAssignment":"456",
                      "Cost":500
                          ]
              }
              ]
     }
]
ESDARII

尝试这个:

j = (df.groupby(['Name','Type'])
         .apply(lambda x: x[['Address','City', 'State', 'PostalCode']].to_dict('r'))
          .reset_index(name='addresses'))

k = (df.groupby(['Name','Type', 'Spot'])
         .apply(lambda x: x[['SpotAssigment', 'Cost']].to_dict('r'))
 .reset_index(name='SpotAssignments'))


h = (k.groupby(['Name','Type'])
         .apply(lambda x: x[['Spot','SpotAssignments']].to_dict('r'))
 .reset_index(name='spots'))
         


m = j.merge(h, how='inner', on=['Name', 'Type'])
result = m.to_dict(orient='records')

from pprint import pprint as pp
pp(result)

result是字典的python列表,格式与您想要的格式相同,您应该可以将其直接转储为JSON。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章