Python 将多个group by转换为json

Python 将多个group by转换为json,python,json,pandas,Python,Json,Pandas,我在将以下数据帧转换为JSON结构时遇到了一些问题。我试过几件事,但都没能做到最后一点。 因此,我有一个数据框架,包括以下内容 serialNumber | date | part | value | name --------------|------------|-------|-------|---------------- ABC0001 | 01/10/2019 | Part1 | ABC1 | ABC ABC0001

我在将以下数据帧转换为JSON结构时遇到了一些问题。我试过几件事,但都没能做到最后一点。 因此,我有一个数据框架,包括以下内容

  serialNumber |    date    | part  | value | name
 --------------|------------|-------|-------|---------------- 
  ABC0001      | 01/10/2019 | Part1 | ABC1  | ABC            
  ABC0001      | 01/10/2019 | Part1 | ABC2  | XYZ            
  ABC0001      | 02/10/2019 | Part2 | ABC3  | ASF            
  ABC0001      | 02/10/2019 | Part2 | ABC4  | TSR    
需要它的格式是

  { "SerialNumber": "ABC001",
    "detail": [  { "part": "Part1",
                   "date":"01/10/2019",
                   "extras": [  { "value": "ABC1",
                                  "name": "ABC"
                                },
                                { "value": "ABC2",
                                  "name": "XYZ"
                                }]
                 },
                 { "part": "Part2",
                   "date":"02/10/2019",
                   "extras": [   { "value": "ABC3",
                                  "name": "ASF"
                                },
                                { "value": "ABC4",
                                  "name": "TSR"
                                }]
              ]
     }  
所以分组序列号,然后是数据和部分,然后是值和名称。 我看了一些答案,最后一个答案帮助很大

df.groupby(['serialNumber', 'Part']).apply(
        lambda r: r[['Value', 'identifierName']].to_dict(orient='records')
    ).unstack('serialNumber').apply(lambda s: [
        {s.index.name: idx, 'detail=': value}
        for idx, value in s.items()]
    ).to_json(orient='records')
这让我

[
   {
      "ABC0001":{
         "Part":"Part1",
         "detail=":[
            {
               "Value":"ABC1",
               "identifierName":"ABC"
            },
            {
               "Value":"ABC2",
               "identifierName":"XYZ"
            }
         ]
      }
   },
   {
      "ABC0001":{
         "Part":"Part2",
         "detail=":[
            {
               "Value":"ABC3",
               "identifierName":"ASF"
            },
            {
               "Value":"ABC4",
               "identifierName":"TSR"
            }
         ]
      }
   }
]
但是当我添加日期时出现故障,并且没有显示序列号标签
建议??提示?

熊猫中没有解决此问题的默认函数

该嵌套代码在
MultIndex
的每一层进行迭代,将层添加到字典中,直到最深的层被分配给
系列

这将适用于任意数量的嵌套折叠:

grouped=df.set_索引(['serialNumber','Part'])


感谢更新,我刚刚运行了一个测试,得到了“DataFrameGroupBy”对象的“无法访问可调用属性”itertuples,尝试使用“应用”方法“我只是将csv文件读入一个dataframe,然后运行上面的代码?建议?是的,我理解问题并解决了它。对不起,还有一个,我;我尝试过调试它,现在得到了ValueError:太多的值无法解包(预期为2)@Jonee哪一行?对于索引,值在grouped.itertuples()中
import json

levels = grouped.ndim
dicts = [{} for i in range(levels)]
last_index = None

for index,value in enumerate(grouped.itertuples(), 1):

    if not last_index:
        last_index = index

    for (ii,(i,j)) in enumerate(zip(index, last_index)):
        if not i == j:
            ii = levels - ii -1
            dicts[:ii] =  [{} for _ in dicts[:ii]]
            break

    for i, key in enumerate(reversed(index)):
        dicts[i][key] = value
        value = dicts[i]

    last_index = index


result = json.dumps(dicts[-1])