将pandas multiindex series转换为Json python

2024-05-16 00:31:18 发布

您现在位置:Python中文网/ 问答频道 /正文

嗨,我有两个熊猫系列类似下面

PnL公司

           Product Name      Price
Company A  Orange            3000
Company B  Apple             2000
           Grapes            1000

税收

^{pr2}$

我想将pandas系列转换为以下JSON格式

{'PnL':{'Company A':{'productName':'Orange','price':3000},
        'Company B':[{'productName':'Apple','price':2000},
                     {'productName':'Grapes','price':1000}]
       },
 'Tax':{'Company A':{'productName':'Orange','price':100},
        'Company B':[{'productName':'Apple','price':100},
                     {'productName':'Grapes','price':10}]
       }
}

我尝试使用下面的代码

convertedJson = json.dumps([{'company': k[0], 'productName':k[1],'price': v} for k,v in df.items()])

但是我不能形成我想要生成的JSON。 谢谢你的帮助


Tags: namejsonapplepandas公司productpricecompany
1条回答
网友
1楼 · 发布于 2024-05-16 00:31:18

您可以使用^{}DaatFrames连接在一起,然后使用^{}和{a3}进行预期输出:

df = pd.concat([s1, s2], keys=('PnL','Tax')).reset_index()
df.columns = ['type','company','productName','price']
print (df)
  type    company productName  price
0  PnL  Company A      Orange   3000
1  PnL  Company B       Apple   2000
2  PnL  Company B      Grapes   1000
3  Tax  Company A      Orange   3000
4  Tax  Company B       Apple   2000
5  Tax  Company B      Grapes   1000

d = (df.groupby(['type','company'])['productName','price']
       .apply(lambda x: x.to_dict('r'))
       .reset_index(name='data')
       .groupby('type')['company','data']
       .apply(lambda x: x.set_index('company')['data'].to_dict())
       .to_json()
       )

^{pr2}$

相关问题 更多 >