pandas学习笔记(2)——多层索引

博客介绍了创建多层索引的方法,还提到多层索引的索引切片规则与之前类似,聚焦于多层索引相关信息技术内容。

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

创建多层索引的方法

#用from_product
Series(np.random.randint(0,150,size = 8),index = pd.MultiIndex.from_product([['a','b','c','d'],['期中','期末']]))
Out[23]: 
a  期中     51
   期末    133
b  期中    132
   期末    115
c  期中     65
   期末     91
d  期中     30
   期末    138
#用from_arrays
Series(np.random.randint(0,150,size = 8),
       index = pd.MultiIndex.from_arrays([['a','a','b','b','c','c','d','d'],['期中','期末','期中','期末','期中','期末','期中','期末']]))

df = DataFrame(data = np.random.randint(0,150,size = (8,3)),
               columns = ['python','math','english'],
               index = pd.MultiIndex.from_product([['a','b','c','d'],['期中','期末']]))
df
#三层也是同理,用乘法原理两两组合就行
Out[33]: 
      python  math  english
a 期中     108    14      138
  期末      78   136       84
b 期中      16     3       73
  期末     116    57      137
c 期中       2   125      124
  期末     122     5       53
d 期中      28   101       68
  期末       0    66       33
#多层索引可以是行,也可以是列。
df2 = DataFrame(data = np.random.randint(0,150,size = (5,6)),
                columns = pd.MultiIndex.from_product([['python','math','english'],['期中','期末']]),
                index = list('abcde'))
df2
Out[34]: 
  python      math      english     
      期中   期末   期中   期末      期中   期末
a     74   83   24  149      13   35
b     43  132  141   51     106   66
c    137   45  107  140      38  124
d     14  117  106  115       5   16
e     69   73   44  122      53   35

多层索引的索引切片,和之前的规则类似

df.iloc[0]
Out[5]: 
python       2
math        43
english    118
Name: (a, 期中), dtype: int32

df.loc['a','期末']['python']#索引某个元素

df['a':'c']#切片
Out[6]: 
      python  math  english
a 期中       2    43      118
  期末      63   140       85
b 期中     117     0       94
  期末      22   126       82
c 期中     123    24        0
  期末      19    85      146
  
df.iloc[0:3]
Out[7]: 
      python  math  english
a 期中       2    43      118
  期末      63   140       85
b 期中     117     0       94

#聚合操作
df.mean(axis = 0,level = 0)#用level确定对第几层索引进行聚合函数
Out[9]: 
   python  math  english
a    32.5  91.5    101.5
b    69.5  63.0     88.0
c    71.0  54.5     73.0
d    63.0  85.5    119.0

df.mean(axis = 0,level = 1)
Out[10]: 
    python    math  english
期中    73.5   22.50    76.00
期末    44.5  124.75   114.75

#索引的堆
df.unstack()#行变列
  python     math      english     
      期中  期末   期中   期末      期中   期末
a      2  63   43  140     118   85
b    117  22    0  126      94   82
c    123  19   24   85       0  146
d     52  74   23  148      92  146

df2.stack()#列变行
Out[12]: 
      english  math  python
a 期中       74    54      49
  期末      109    73      39
b 期中      137    54     128
  期末      107    84     138
c 期中       80   149     127
  期末      142    19      40
d 期中      132    64      70
  期末       83   132     107
e 期中       36   147      97
  期末      137   128      79
  
df.unstack(level = 0)#如果有很多层索引df.unstack(level = [0,1])可换多层索引
Out[13]: 
   python               math               english              
        a    b    c   d    a    b   c    d       a   b    c    d
期中      2  117  123  52   43    0  24   23     118  94    0   92
期末     63   22   19  74  140  126  85  148      85  82  146  146

##使用stack或unstack时,level = 什么,什么就消失,出现在行/列里
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值