根据包含列表的嵌套字典创建数据框

时间:2020-01-23 23:48:57

标签: python pandas dataframe dictionary nested

我找不到类似的答案来解决我的问题,所以我们开始:

我有以下格式的字典:

d = {key_1: 
        {
         metric_1: [value_11, value_12], 
         metric_2: [value_13, value_14], 
         metric_3: value_15
       }, 
      key_2: {
         metric_1: [value_21], 
         metric_2: [value_22], 
         metric_3: value_23
       }
    }

如您所见,指标在其列表中包含的项目数量不同。

将其转换为df的好方法是什么?如果我使用from_dict方法,我将最终得到包含列表(错误)的df单元。

我想要实现的是为列表中的每个值创建一个新行,并将键保留为索引:

index | metric_1 | metric_2 | metric_3
———————————————————————————————————————
key_1 | value_11 | value_13 | value_15
key_1 | value_12 | value_14 | value_15
key_2 | value_21 | value_22 | value_23

想法? :)

2 个答案:

答案 0 :(得分:3)

这是一种方法

s=pd.DataFrame(d).T
s=s.explode('metric_1').assign(metric_2=s.metric_2.explode().values)
       metric_1  metric_2  metric_3
key_1  value_11  value_13  value_15
key_1  value_12  value_14  value_15
key_2  value_21  value_22  value_23
#s.reset_index(inplace=True)

答案 1 :(得分:2)

如果您的数据框具有任意长度的键和值,这是一种方法

data_dict = {k : pd.DataFrame(v) for k,v in d.items()}

df = pd.concat(data_dict .values(),keys=data_dict.keys())

print(df)


         metric_1  metric_2  metric_3
key_1 0  value_11  value_13  value_15
      1  value_12  value_14  value_15
key_2 0  value_21  value_22  value_23