我正在尝试将以下字典放入特定的DataFrame中。
字典的结构如下:
test = {'JTTIX US Equity':
{'HB_ASSET_CLASS_ALLOCATION':
{'Equity': '32.14642',
'Debt': '60.890407'},
'HB_MARKET_CAP_ALLOCATION':
{'Small-cap': '0.776239',
'Mid-cap': '10.81831',
'Large-cap': '88.027725'}}}
我试图达到的最终数据帧是:
BBG_ID FIELD TYPE VALUE
JTTIX US Equity HB_ASSET_CLASS_ALLOCATION Equity 32.14642
JTTIX US Equity HB_ASSET_CLASS_ALLOCATION Debt 60.890407
JTTIX US Equity HB_MARKET_CAP_ALLOCATION Small-cap 0.776239
JTTIX US Equity HB_MARKET_CAP_ALLOCATION Mid-cap 10.81831
JTTIX US Equity HB_MARKET_CAP_ALLOCATION Large-cap 88.027725
我尝试了这个不错的答案的所有选项在这里将字典列表转换为pandas DataFrame,但我仍然无法达到我想要的最终格式。
我认为我可以通过创建一个循环来做到这一点,但我想仔细检查一下是否有方法可以避免它,因为实际的字典非常大。
这是使用stack
的一种方法。本质上是构造数据框架,stack
它;再次构造一个DataFrame,再次stack
;thenreset_index
:
tmp = pd.DataFrame.from_dict(test, orient='index').stack()
out = pd.DataFrame(tmp.tolist(), tmp.index).stack().rename_axis(index=['BBG_ID','FIELD','TYPE']).reset_index(name='VALUE')
输出:
BBG_ID FIELD TYPE VALUE
0 JTTIX US Equity HB_ASSET_CLASS_ALLOCATION Equity 32.14642
1 JTTIX US Equity HB_ASSET_CLASS_ALLOCATION Debt 60.890407
2 JTTIX US Equity HB_MARKET_CAP_ALLOCATION Small-cap 0.776239
3 JTTIX US Equity HB_MARKET_CAP_ALLOCATION Mid-cap 10.81831
4 JTTIX US Equity HB_MARKET_CAP_ALLOCATION Large-cap 88.027725