【问题标题】:Reindex specific level of pandas MultiIndex重新索引特定级别的 pandas MultiIndex
【发布时间】:2019-11-19 01:35:45
【问题描述】:

我得到了一个具有 3 级 Index 的 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

我希望第三个索引在任何地方都相同

【问题讨论】:

    标签: python pandas multi-index


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2020-05-19
      • 2023-03-10
      • 2018-06-19
      • 1970-01-01
      • 2019-02-28
      • 1970-01-01
      • 2015-05-22
      • 2019-03-18
      相关资源
      最近更新 更多