【问题标题】:Create two levels of multiindex创建两级多索引
【发布时间】:2020-07-24 12:13:36
【问题描述】:

我可以创建一个 df,然后将其修改为具有两级列索引,如下所示:

import pandas as pd
import numpy as np


idx = pd.MultiIndex.from_product([['bar', 'baz', 'foo', 'qux'], ['one', 'two', 'three']])

df = pd.DataFrame(np.random.randn(12, 6), index=idx, columns=['C', 'D', 'E', 'F', 'G', 'H'])
print(df, '\n')

df.columns = pd.MultiIndex.from_product([['A'], df.columns])
print(df.head(3))

我明白了:

                  A                                                  
                  C         D         E         F         G         H
bar one   -0.370228  1.246188  0.673553  0.116890  0.129511  0.126562
    two   -1.059752 -0.357985 -0.189913  1.080814  0.588176  0.212053
    three -0.345277 -1.227097  0.915477  1.475285 -1.342885  0.149785

但我想要的是这样的:

                  A                             B                      
                  C         D         E         F         G         H
bar one   -0.370228  1.246188  0.673553  0.116890  0.129511  0.126562
    two   -1.059752 -0.357985 -0.189913  1.080814  0.588176  0.212053
    three -0.345277 -1.227097  0.915477  1.475285 -1.342885  0.149785

这样我的列被访问为:AC、AD、AE、BF、BG、BH

我已经尝试过这个(以及其他一些东西):

df.columns = pd.MultiIndex.from_product([[['A'], df[['C', 'D', 'E']]], [['B'], df[['F', 'G', 'H']]]])

但我不断收到此错误:

TypeError: unhashable type: 'list'

如何以我想要的方式创建多索引?

【问题讨论】:

    标签: python-3.x pandas multi-index


    【解决方案1】:

    您只需分配一个二维数组作为数据框的列:

    df.columns = [
        ['A']*3 + ['B']*3,
        ['C', 'D', 'E', 'F', 'G', 'H']
    ]
    

    结果:

                      A                             B                    
                      C         D         E         F         G         H
    bar one   -0.682664  0.221460 -0.595096 -0.327291  0.997758 -0.100819
        two    0.698674 -0.433741  1.572080  0.849064  0.666364 -0.313989
        three -0.597167  0.322044 -0.693410  1.551602  0.718136 -0.881298
    baz one    0.701170 -0.164332  0.111689  0.192714 -0.743848 -1.447928
        two    0.504745 -0.059556 -1.673365  0.734746  0.586669  1.541826
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-23
      • 2018-06-21
      • 2016-01-10
      • 1970-01-01
      • 1970-01-01
      • 2015-03-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多