简体   繁体   English

将 Pandas Dataframe 转换为多级嵌套 JSON

[英]Convert Pandas Dataframe into multi level nested JSON

I have a dataframe that I need to convert into a nested json format.我有一个需要转换为嵌套 json 格式的数据框。 I can get one level of grouping done, but I don't know how to do a second grouping as well as a nesting beneath that.我可以完成一个级别的分组,但我不知道如何进行第二个分组以及在其下进行嵌套。

I have looked a lot of different examples, but nothing really gets me the example I posted below.我看过很多不同的例子,但没有什么能让我真正理解我在下面发布的例子。

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))

I want it to look like the below.我希望它看起来像下面这样。

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

try this:尝试这个:

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)

this result is a python list of dicts in the same format that you want, you should be able to dump it as JSON directly.这个result是一个与你想要的格式相同的 python 字典列表,你应该能够直接将它转储为 JSON。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM