第2关:多级索引的数据转换与累计方法

任务描述

本关任务:根据相关知识完成编程要求并输出目标数据。

相关知识

多级索引行列转换

使用多级索引的关键是掌握有效数据转换的方法,Pandas提供了许多操作,可以让数据在内容保持不变的同时,按照需要进行行列转换。上一关我们用stack()unstack()演示过简单的行列转换,但其实还有许多合理控制层级行列索引的方法,让我们来一探究竟。

  1. 有序和无序的索引;
    如果MultiIndex不是有序的索引,那么大多数切片操作都会失败,如下例:

     
      
    1. # 首先创建一个不按字典顺序排列的多级索引Series
    2. index = pd.MultiIndex.from_product([['a', 'c', 'b'], [1, 2]])
    3. data = pd.Series(np.random.rand(6), index=index)
    4. data.index.names = ['char', 'int']
    5. data
    6. Out:
    7. char int
    8. a 1 0.003001
    9. 2 0.164974
    10. c 1 0.741650
    11. 2 0.569264
    12. b 1 0.001693
    13. 2 0.526226
    14. dtype: float64
    15. # 如果对该多级索引使用局部切片,就会报错
    16. try:
    17. data['a':'b']
    18. except KeyError as e:
    19. print(type(e))
    20. print(e)
    21. Out:
    22. <class 'KeyError'>
    23. 'Key length (1) was greater than MultiIndex lexsort depth (0)'

    问题是出在MultiIndex无序排列上,局部切片和许多其他相似的操作都要求MultiIndex的各级索引是有序的。为此,Pandas提供了许多便捷的操作完成排序,如sort_index()sortlevel()方法。

     
      
    1. data = data.sort_index()
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值