将嵌套字典转换为多级列数据框。

3
我有一个字典,想将其转换为多级列dataframe,索引将成为字典最外层键。
my_dict = {'key1': {'sub-key1': {'sub-sub-key1':'a','sub-sub-key2':'b'}, 'sub-key2': {'sub-sub-key1':'aa','sub-sub-key2':'bb'}},
    'key2': {'sub-key1': {'sub-sub-key1':'c','sub-sub-key2':'d'}, 'sub-key2': {'sub-sub-key1':'cc','sub-sub-key2':'dd'}}}

My desired output should look like:

               sub-key1                        sub-key2
    sub-sub-key1    sub-sub-key2     sub-sub-key1    sub-sub-key2
key1    a               b                aa               bb
key2    c               d                cc               dd

我尝试使用concatpd.concat({k: pd.DataFrame.from_dict(my_dict, orient='index') for k, v in d.items()}, axis=1),但结果不如预期。

我还尝试重新组织字典。

reformed_dict = {}
for outerKey, innerDict in my_dict.items():
    for innerKey, values in innerDict.items():
        reformed_dict[(outerKey, innerKey)] = values
pd.DataFrame(reformed_dict)

这一次的结果仍然不正确。最高级别的列和索引位置被交换了。

有其他的方法可以解决这个问题吗?


看起来你需要 pandas.MultiIndex.from_product - Gonçalo Peres
2个回答

3

你的concat方法已经很接近了,需要在之后使用unstack方法,就像这样:

res = pd.concat({k: pd.DataFrame.from_dict(v, orient='columns') 
                 for k, v in my_dict.items()}
         ).unstack()
print(res)
#          sub-key1                  sub-key2             
#      sub-sub-key1 sub-sub-key2 sub-sub-key1 sub-sub-key2
# key1            a            b           aa           bb
# key2            c            d           cc           dd

1
尝试使用 pd.concat、字典推导式和 pd.from_dict 格式化数据框,然后使用 pd.unstack 调整数据框结构的一行代码。
df = pd.concat({k: pd.DataFrame.from_dict(v) for k, v in my_dict.items()}).unstack()

结果:
              sub-key1                        sub-key2
    sub-sub-key1    sub-sub-key2    sub-sub-key1    sub-sub-key2
key1    a                 b              aa                bb
key2    c                 d              cc                dd

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接