我找不到类似的答案来解决我的问题,所以我们开始:
我有以下格式的字典:
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
想法? :)
答案 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