Python 将dataframe转换为JSON对象列

Python 将dataframe转换为JSON对象列,python,pandas,jsonb,Python,Pandas,Jsonb,我有一个pandas数据框,其中包含关于一个用户的信息,该用户有多个订单,并且在每个订单中有多个项目购买。数据帧格式的一个示例: user_id | order_num | item_id | item_desc 1 1 1 red 1 1 2 blue 1 1 3 green 我想将它转换为列中的JSONb对象,以便在postgr

我有一个pandas数据框,其中包含关于一个用户的信息,该用户有多个订单,并且在每个订单中有多个项目购买。数据帧格式的一个示例:

user_id | order_num | item_id | item_desc 
    1        1         1         red
    1        1         2         blue
    1        1         3         green
我想将它转换为列中的JSONb对象,以便在postgresql中查询它。 目前我正在使用以下代码:

j = (reg_test.groupby(['user_id', 'order_num'], as_index=False)
             .apply(lambda x: x[['item_id','item_desc']].to_dict('r'))
             .reset_index()
             .rename(columns={0:'New-Data'})
             .to_json(orient='records'))
这就是我得到的结果:

'''
[
          {
            "New-Data": [
              {
                "item_id": "1",
                "item_desc": "red",
              },
              {
                "item_id": "2",
                "item_desc": "blue",
              },
              {
                "item_id": "3",
                "item_desc": "green",
              }
            ],
            "order_number": "1",
            "user_id": "1"
          }
        ]
'''
虽然这是正确的json格式,但我希望结果如下所示:

'''

[
  {
    "New-Data": [{
"1":
      {
        "item_id": "1",
        "item_desc": "red",
      },
"2": {
        "item_id": "2",
        "item_desc": "blue",
      },
"3":
      {
        "item_id": "3",
        "item_desc": "green",
      }
     }
    ],
    "order_number": "1",
    "user_id": "1"
  }
]
'''

您是否考虑过使用自定义函数

将熊猫作为pd导入
df=pd.DataFrame({'user_id':{0:1,1:1,2:1},
'order_num':{0:1,1:1,2:1},
'item_id':{0:1,1:2,2:3},
'item_desc':{0:'红色',1:'蓝色',2:'绿色'})
out=df.groupby(['user\u id','order\u num'])[[“item\u id”,“item\u desc”]]\
.适用(lambda x:x.to_dict(“记录”))\
.apply(lambda x:[{str(l[“item_id”]):l表示x}中的l)\
.reset_索引(name=“新数据”)\
.to_dict(“记录”)
其中
out
返回

[{'user\u id':1,
“订单数量”:1,
“新数据”:[{'1':{'item_id':1,'item_desc':'red'},
'2':{'item_id':2'item_desc':'blue'},
'3':{'item_id':3'item_desc':'green'}]}]

作为@rpanai解决方案的替代方案,我将处理移到了vanilla python中:

将数据帧转换为dict:

M = df.to_dict("records")
为项目创建dict

items = [
         {key: value 
         for key, value in entry.items() 
         if key not in ("user_id", "order_num")}
         for entry in M
        ]
item_details = [{str(num + 1): entry}
                for num, entry
                in enumerate(items)]

print(item_details)

[{'1': {'item_id': 1, 'item_desc': 'red'}},
 {'2': {'item_id': 2, 'item_desc': 'blue'}},
 {'3': {'item_id': 3, 'item_desc': 'green'}}]
初始化dict并添加剩余数据

d = dict()
d['New-Data'] = item_details

d['order_number'] = M[0]['order_num']
d['user_id'] = M[0]['user_id']

wrapper = [d]

print(wrapper)

[{'New-Data': [{'1': {'item_id': 1, 'item_desc': 'red'}},
   {'2': {'item_id': 2, 'item_desc': 'blue'}},
   {'3': {'item_id': 3, 'item_desc': 'green'}}],
  'order_number': 1,
  'user_id': 1}]

好的,你的问题是什么?请参阅,.我想为项目添加另一个嵌套层,该层是目标,而不是问题或障碍。