Pandas:多级索引--高维数据

本文介绍如何使用Pandas库进行多级索引的创建、检索和转换操作。包括创建多级索引的Series、选取不同层级的索引、解除多级索引并将其转换为普通索引,以及重新组织索引层级。此外还介绍了如何为不同层级的索引指定名称。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import numpy as np
import pandas as pd
from pandas import Series,DataFrame

一、创建多级索引

data = Series(np.random.randn(10),index=[['x','x','x','x','x','x','y','y','y','y'],
                                         ['a','a','a','b','b','b','c','c','d','d'],
                                         [1,2,3,1,2,3,1,2,2,3]])
print(data)
x  a  1    1.344209
      2    0.110941
      3   -0.194212
   b  1    1.017832
      2   -0.330067
      3   -0.330298
y  c  1    0.936063
      2    0.727602
   d  2   -1.859205
      3    0.008185
dtype: float64

二、检索多级索引

1.选取外层索引

data['x']
a  1    1.344209
   2    0.110941
   3   -0.194212
b  1    1.017832
   2   -0.330067
   3   -0.330298
dtype: float64
data['x':'y']
x  a  1    1.344209
      2    0.110941
      3   -0.194212
   b  1    1.017832
      2   -0.330067
      3   -0.330298
y  c  1    0.936063
      2    0.727602
   d  2   -1.859205
      3    0.008185
dtype: float64

2.选取内层索引

data['x','a',1] # 类似多维数组的存取
1.3442085471583016

三、解除多级索引

默认为最内层的索引,即level=-1

print(data.unstack())
hello         1         2         3
x a    1.344209  0.110941 -0.194212
  b    1.017832 -0.330067 -0.330298
y c    0.936063  0.727602       NaN
  d         NaN -1.859205  0.008185

解除其他层索引

print(data.unstack(level=-2))
                a         b         c         d
  hello                                        
x 1      1.344209  1.017832       NaN       NaN
  2      0.110941 -0.330067       NaN       NaN
  3     -0.194212 -0.330298       NaN       NaN
y 1           NaN       NaN  0.936063       NaN
  2           NaN       NaN  0.727602 -1.859205
  3           NaN       NaN       NaN  0.008185

四、转化为多级索引

将中间层索引转换为内层索引

data.unstack(level=-2).stack()
x  1  a    1.344209
      b    1.017832
   2  a    0.110941
      b   -0.330067
   3  a   -0.194212
      b   -0.330298
y  1  c    0.936063
   2  c    0.727602
      d   -1.859205
   3  d    0.008185
dtype: float64

五、为不同层索引指定名称(name)

df = data.unstack()
print(df)
            1         2         3
x a  1.344209  0.110941 -0.194212
  b  1.017832 -0.330067 -0.330298
y c  0.936063  0.727602       NaN
  d       NaN -1.859205  0.008185
df.index.names = ['outer','inner'] # 指定两层索引的名称
df.columns.name = 'hello'
print(df)
hello               1         2         3
outer inner                              
x     a      1.344209  0.110941 -0.194212
      b      1.017832 -0.330067 -0.330298
y     c      0.936063  0.727602       NaN
      d           NaN -1.859205  0.008185
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BQW_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值