gpt4 book ai didi

python - 重新索引特定级别的 pandas MultiIndex

转载 作者:太空宇宙 更新时间:2023-11-03 11:13:08 26 4
gpt4 key购买 nike

我有一个具有 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

我希望第三个索引到处都一样

最佳答案

使用DataFrame.unstack默认情况下使用 MultiIndex 的最后一个索引使用 DataFrame.stack :

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

关于python - 重新索引特定级别的 pandas MultiIndex,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56953517/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com