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

标签 python pandas dictionary dataframe multi-index

我有一个迭代过程,每次迭代都使用不同的参数值运行,我想收集参数值和结果并将它们放入 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

最佳答案

我最近遇到了这个问题,似乎有一种比接受的答案更简洁的方法:

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     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

关于python - 从字典列表创建 Pandas MultiIndex 的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54227240/

相关文章:

python - 如何根据数据框中另一列的值将数据输入到新列中?

python - 使用来自列表的键和来自另一个列表的列表的值创建字典

python - 在 django admin 中公开多个数据库

python - 无法使用 AWS SAM 构建 python 应用程序

python - 有没有办法在运行Python时出错后访问变量

c# - 如何将其转换为字典的字典

c++ - 'erase' ing 之后的映射迭代器行为

python - IPython 和 3D : draw simple and interactive scenes

python - 如何通过 Python 中的最后一个字符过滤列

python - 使用 pandas 计算两个特定行之间的百分比变化