多层嵌套字典到df的有效转换



我看了几个问题,但没有找到用这种不规则结构转换嵌套字典的答案:

a = {'Cat0': {'brand1': {'b': 0.78, 'c': 1}, 'brand2': {'k': 1, 'c': 1}}, 'Cat1': {'brand4': {'b': 10, 's': 0.0}}, 'Cat2': {'brand1': {'j': 1, 'c': 0.0}}}

到下面的pandas数据框架:

Category    Brand  Peer Value
0   Cat0        brand1 b    0.78
1   Cat0        brand1 c    1
2   Cat0        brand2 k    1
3   Cat0        brand2 c    1
4   Cat1        brand4 b    10
5   Cat1        brand4 s    0.0
6   Cat2        brand1 j    1
7   Cat2        brand1 c    0.0

字典将是巨大的,所以我正在寻找最有效的解决方案。你能帮我吗?

使用理解来平化字典是非常简单的:

df = pd.DataFrame([[k, k1, k2, v]
for k, d in a.items()
for k1, d1 in d.items()
for k2, v in d1.items()],
columns=['Category', 'Brand', 'Peer', 'Value'])

使用生成器而不是推导式(将在实际数据上进行测试)可能会获得更好的效率:

df = pd.DataFrame(([k, k1, k2, v]
for k, d in a.items()
for k1, d1 in d.items()
for k2, v in d1.items()),
columns=['Category', 'Brand', 'Peer', 'Value'])

输出:

Category   Brand Peer  Value
0     Cat0  brand1    b   0.78
1     Cat0  brand1    c   1.00
2     Cat0  brand2    k   1.00
3     Cat0  brand2    c   1.00
4     Cat1  brand4    b  10.00
5     Cat1  brand4    s   0.00
6     Cat2  brand1    j   1.00
7     Cat2  brand1    c   0.00

最新更新