Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将数据帧转换为多级嵌套JSON_Python_Json_Pandas_Dataframe_Nested - Fatal编程技术网

Python 将数据帧转换为多级嵌套JSON

Python 将数据帧转换为多级嵌套JSON,python,json,pandas,dataframe,nested,Python,Json,Pandas,Dataframe,Nested,我有一个需要转换成嵌套json格式的数据帧。我可以完成一个级别的分组,但我不知道如何进行第二个分组以及下面的嵌套 我看了很多不同的例子,但是没有什么能真正让我理解我在下面发布的例子 import pandas as pd data= {'Name': ['TEST01','TEST02'], 'Type': ['Tent','Tent'], 'Address':['123 Happy','456 Happy'], 'City':['Happytown'

我有一个需要转换成嵌套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
                          ]
              }
              ]
     }
]
试试这个:

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)

这个
结果
是一个DICT的python列表,其格式与您想要的格式相同,您应该能够直接将其作为JSON转储。

这似乎很管用!谢谢你的帮助!