从字典列表中创建 Pandas MultiIndex 的最佳方法是什么?

我有一个迭代过程,每次迭代都使用不同的参数值运行,我想收集参数值和结果,并将它们放入 Pandas 数据帧中,该数据帧具有从参数值集(这是唯一的)构建的多索引。


每次迭代,参数值都在字典中,如下所示:


params = {'p': 2, 'q': 7}

因此,很容易将它们与结果一起收集在列表中:


results_index = [

    {'p': 2, 'q': 7},

    {'p': 2, 'q': 5},

    {'p': 1, 'q': 4},

    {'p': 2, 'q': 4}

]

results_data = [

    {'A': 0.18, 'B': 0.18},

    {'A': 0.67, 'B': 0.21},

    {'A': 0.96, 'B': 0.45},

    {'A': 0.58, 'B': 0.66}

]

但是我找不到一种简单的方法来从results_index.


我试过这个:


df = pd.DataFrame(results_data, index=results_index)

但它产生了这个:


                     A     B

{'p': 2, 'q': 7}  0.18  0.18

{'p': 2, 'q': 5}  0.67  0.21

{'p': 1, 'q': 4}  0.96  0.45

{'p': 2, 'q': 4}  0.58  0.66

(索引没有转换成MultiIndex)


我想要的是这个:


        A     B

p q            

2 7  0.18  0.18

  5  0.67  0.21

1 4  0.96  0.45

2 4  0.58  0.66

这有效,但必须有一个更简单的方法:


df = pd.concat([pd.DataFrame(results_index), pd.DataFrame(results_data)], axis=1).set_index(['p', 'q'])

更新:


此外,这有效但让我感到紧张,因为我如何确保参数值与级别名称对齐?


index = pd.MultiIndex.from_tuples([tuple(i.values()) for i in results_index], 

                                  names=results_index[0].keys())

df = pd.DataFrame(results_data, index=index)


        A     B

p q            

2 7  0.18  0.18

  5  0.67  0.21

1 4  0.96  0.45

2 4  0.58  0.66


泛舟湖上清波郎朗
浏览 220回答 2
2回答

largeQ

我最近遇到了这个问题,似乎有一种比接受的答案更简洁的方法:results_index = [    {'p': 2, 'q': 7},    {'p': 2, 'q': 5},    {'p': 1, 'q': 4},    {'p': 2, 'q': 4}]results_data = [    {'A': 0.18, 'B': 0.18},    {'A': 0.67, 'B': 0.21},    {'A': 0.96, 'B': 0.45},    {'A': 0.58, 'B': 0.66}]index = pd.MultiIndex.from_frame(pd.DataFrame(results_index))pd.DataFrame(results_data, index=index)输出:        A     Bp q            2 7  0.18  0.18  5  0.67  0.211 4  0.96  0.452 4  0.58  0.66
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python