我在使用 MultiIndex 和 stack() 时遇到问题。以下示例基于Calvin Cheung在 StackOvervlow 上的解决方案。
=== multi.csv ===
h1,main,h3,sub,h5
a,A,1,A1,1
b,B,2,B1,2
c,B,3,A1,3
d,A,4,B2,4
e,A,5,B3,5
f,B,6,A2,6
=== multi.py ===
#!/usr/bin/env python
import pandas as pd
df1 = pd.read_csv('multi.csv')
df2 = df1.pivot('main', 'sub').stack()
print(df2)
=== output ===
h1 h3 h5
main sub
A A1 a 1 1
B2 d 4 4
B3 e 5 5
B A1 c 3 3
A2 f 6 6
B1 b 2 2
只要子列中的条目相对于主列中的相应条目是唯一的,这就会起作用。但是,如果我们将 e 行中的子列条目更改为 B2,那么 B2 在 A 行的组中不再是唯一的,我们会收到错误消息:“pandas.core.reshape.ReshapeError: Index contains duplicate entries, cannot reshape” .
我期望子索引的形状表现得像主索引的形状,其中第一行条目下的空白条目指示重复项。
=== expected output ===
h1 h3 h5
main sub
A A1 a 1 1
B2 d 4 4
e 5 5
B A1 c 3 3
A2 f 6 6
B1 b 2 2
所以我的问题是,如何以允许子级别重复的方式构建 MultiIndex?