Skip to main content
 首页 » 编程设计

python之如何向 MultiIndex 添加级别

2025年05月04日23虾米哥

index = [np.array(['foo', 'foo', 'qux']), 
         np.array(['a', 'b', 'a'])] 
data = np.random.randn(3, 2) 
columns = ["X", "Y"] 
df = pd.DataFrame(data, index=index, columns=columns) 
df.index.names = ["Level0", "Level1"] 
print df 
 
                      X         Y 
Level0 Level1                     
foo    a       0.418549  0.252685 
       b      -1.307099  0.202833 
qux    a       0.046095 -0.968976 

新等级

我想获取 df 的索引并创建一个现在具有附加级别的新 MultiIndex。

new_level_name = "New level" 
new_level_labels = ['p', 'q'] 
# new_multi-index  

所需的多索引

Level0 Level1 Level2                     
foo    a      p        
              q        
       b      p       
              q        
qux    a      p       
              q       

请您参考如下方法:

最简单的是使用stack使用新的 DataFrame 以及按新级别值排列的列:

df1 = pd.DataFrame(data=1,index=df.index, columns=new_level_labels).stack() 
df1.index.names = ['Level0','Level1',new_level_name] 
print (df1) 
Level0  Level1  New level 
foo     a       p            1 
                q            1 
        b       p            1 
                q            1 
qux     a       p            1 
                q            1 
dtype: int64 
 
print (df1.index) 
MultiIndex(levels=[['foo', 'qux'], ['a', 'b'], ['p', 'q']], 
           labels=[[0, 0, 0, 0, 1, 1], [0, 0, 1, 1, 0, 0], [0, 1, 0, 1, 0, 1]], 
           names=['Level0', 'Level1', 'New level'])