python数据分析之pandas(6)等级索引和分级

之前介绍的Series和DataFrame都是单条索引,其实还可以是多级索引。通过多级索引可以很方便的处理多维数据。

注:ser指Series对象,frame指DataFrame对象

1. Series多级索引

>>> ser = pd.Series(np.arange(4), index=[['a', 'a', 'b', 'b'], ['i1', 'i2', 'i3']])
>>> ser
a  i1    0
   i2    1
b  i3    2
   i4    3
dtype: int32

可以看出,index为2维数组,数组元素为列元素个数,相关操作如下,和二维数组使用方式类似:

ser['a','i1'] //对元素进行操作

ser['a'] 

ser[:,'i1']

2.DataFrame多级索引

(1)可以通过unstack和stack函数让二级索引的Series和DataFrame相互转换

>>> frame = ser.unstack()
>>> frame
    i1   i2   i3   i4
a  0.0  1.0  NaN  NaN
b  NaN  NaN  2.0  3.0
>>> frame.stack()
a  i1    0.0
   i2    1.0
b  i3    2.0
   i4    3.0
dtype: float64

(2)DataFrame可以同时将columns和index都设置为二级索引


>>> frame = pd.DataFrame(np.arange(4).reshape(2,2), index=[['a', 'b'], ['c', 'd'
]], columns=[['c1', 'c2'], ['c3', 'c4']])
>>> frame
    c1 c2
    c3 c4
a c  0  1
b d  2  3

3.调整层级顺序

通过swaplevel可以修改层级顺序,但先要给层级索引命名

>>> frame.index.names = ['colors', 'status']
>>> frame
              c1 c2
              c3 c4
colors status
a      c       0  1
b      d       2  3
>>> frame.swaplevel('status', 'colors')
              c1 c2
              c3 c4
status colors
c      a       0  1
d      b       2  3
>>>

命名后,将status索引列放在前面,colors列放在后面就完成交换了,同时元素内容不变

4.按层级统计数据

frame.sum(level='colors') //对index列colors统计数据

frame.sum(level='id', axis=1) //对columns列进行统计

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值