我有一个具有3级索引的DataFrame,我需要重新索引第三级而不更改第一级和第二级。
我有一个这样的DataFrame:
tuples = [('A', 'a', 1), ('A', 'a', 3), ('A', 'b', 3), ('B', 'c', 1), ('B', 'c', 2), ('B', 'c', 3), ('C', 'd', 2)]
idx = pd.MultiIndex.from_tuples(tuples, names=['first', 'second', 'third'])
df = pd.DataFrame(np.random.randn(7, 2), index=idx, columns=['col1', 'col2'])
col1 col2
first second third
A a 1 -0.999816 -0.599815
3 -0.277794 -0.453870
b 3 1.116561 0.760010
B c 1 1.018475 -0.667625
2 0.695997 0.641531
3 0.593724 0.265256
C d 2 1.133767 0.716083
我想要一个这样的DataFrame:
col1 col2
first second third
A a 1 -0.999816 -0.599815
2 0 0
3 -0.277794 -0.453870
b 1 0 0
2 0 0
3 1.116561 0.760010
B c 1 1.018475 -0.667625
2 0.695997 0.641531
3 0.593724 0.265256
C d 1 0 0
2 1.133767 0.716083
3 0 0
我希望第三个索引在所有地方都相同
答案 0 :(得分:2)
默认情况下,将DataFrame.unstack
与DataFrame.stack
一起使用MultiIndex
的最后一个索引:
df1 = df.unstack(fill_value=0).stack()
print (df1)
col1 col2
first second third
A a 1 -1.549363 -1.206828
2 0.000000 0.000000
3 0.445008 -0.173086
b 1 0.000000 0.000000
2 0.000000 0.000000
3 1.488947 -0.792520
B c 1 1.838997 -0.439362
2 1.160003 -0.577093
3 -1.031044 -0.838885
C d 1 0.000000 0.000000
2 0.316934 0.353254
3 0.000000 0.000000