我很好奇是否可以使用 MultiIndexes,所以我尝试了一下。如果您想指定级别,这可能有其好处。但只是按照 pandas 文档示例 (MultiIdex) 我想出了一个替代解决方案。
首先我创建了一个随机数据字典
s = {(1,2):"a", (4,5):"b", (1,5):"w", (2, 3):"z", (4,1):"p"}
然后我使用pd.MultiIndex 根据字典的键创建层次索引。
index = pd.MultiIndex.from_tuples(s.keys())
index
Out[3]:
MultiIndex(levels=[[1, 2, 4], [1, 2, 3, 5]],
labels=[[0, 2, 2, 1, 0], [1, 3, 0, 2, 3]])
然后,我将字典的值直接传递给 pandas Series,并将索引显式设置为我在上面创建的 MultiIndex 对象。
pd.Series(s.values(), index=index)
Out[4]:
1 2 a
4 5 b
1 p
2 3 z
1 5 w
dtype: object
最后,我重置了索引以获得 OP 请求的解决方案
pd.Series(s.values(), index=index).reset_index()
Out[5]:
level_0 level_1 0
0 1 2 a
1 4 5 b
2 4 1 p
3 2 3 z
4 1 5 w
这涉及更多,因此@ayhan 的回答可能仍然更可取,但我认为这让您了解熊猫可能在后台做什么。或者至少让任何人有机会更多地修改 pandas 的机制。