4.7 pandas的索引处理

4.7 pandas的索引处理

In [1]:

#引入相关模块
import numpy as np   # pandas和numpy常常结合在一起使用,导入numpy库
import pandas as pd  # 导入pandas库
print(pd.__version__) # 打印pandas版本信息
1.4.1

4.7.1 多层索引MultiIndex的创建方式

层次化索引(hierarchical indexing)又称多层索引,是pandas的一项重要功能,在一个轴上拥有多个(两个以上)索引级别,使用户能以低维度形式处理高维度数据。创建多层索引的方式有如下几种:

  1. 在创建Series或DataFrame时,可以通过给index(columns)参数传递嵌套列表(类似于多维数组),进而构建多维索引。每个元素(一维数组)指定每个层级的索引。

In [2]:

df1 = pd.DataFrame(np.random.randint(2,20,size=(4, 8)), index=[["2020", "2020", "2021", "2021"],
["上半年", "下半年", "上半年", "下半年"]],
columns=[["水果", "水果","水果","水果", "蔬菜", "蔬菜","蔬菜","蔬菜"], 
["苹果",'西瓜', "香蕉", "桔子","黄瓜","茄子", "胡萝卜","辣椒"]])
df1

Out[2]:

水果 蔬菜
苹果 西瓜 香蕉 桔子 黄瓜 茄子 胡萝卜 辣椒
2020 上半年 13 9 15 9 13 15 7 8
下半年 9 8 2 9 13 13 8 9
2021 上半年 7 4 3 6 11 13 18 15
下半年 8 6 11 16 14 5 9 4

多层索引的索引属性:

In [3]:

df1.index

Out[3]:

MultiIndex([('2020', '上半年'),
            ('2020', '下半年'),
            ('2021', '上半年'),
            ('2021', '下半年')],
           )

In [4]:

df1.columns

Out[4]:

MultiIndex([('水果',  '苹果'),
            ('水果',  '西瓜'),
            ('水果',  '香蕉'),
            ('水果',  '桔子'),
            ('蔬菜',  '黄瓜'),
            ('蔬菜',  '茄子'),
            ('蔬菜', '胡萝卜'),
            ('蔬菜',  '辣椒')],
           )

可以发现,多层索引的一个索引元素是元组而不是单层索引的标量。这里的df1对应着四维数组:两层行索引+两层列索引,在进行索引切片操作时同样满足numpy的索引切片操作的维度变化规律。

MultiIndex多层索引有个属性level,表示第几层索引,最外层为第0层索引,依次往内,对应1,2...层索引。可以通过下标获取对应层级索引:

In [5]:

df1.columns.levels[0]

Out[5]:

Index(['水果', '蔬菜'], dtype='object')

In [6]:

df1.columns.levels[1]

Out[6]:

Index(['桔子', '胡萝卜', '苹果', '茄子', '西瓜', '辣椒', '香蕉', '黄瓜'], dtype='object')

In [7]:

df1.index.levels[0]

Out[7]:

Index(['2020', '2021'], dtype='object')

In [8]:

df1.index.levels[1]

Out[8]:

Index(['上半年', '下半年'], dtype='object')

对于多层索引,也可以设置索引的名称,此时,设置名称的属性为names(通过一维数组来设置)。每层索引都具有名称

In [9]:

df1.index.names = ["年份", "半年"]
df1.columns.names = ["大类", "小类"]
df1

Out[9]:

大类 水果 蔬菜
小类 苹果 西瓜 香蕉 桔子 黄瓜 茄子 胡萝卜 辣椒
年份 半年
2020 上半年 13 9 15 9 13 15 7 8
下半年 9 8 2 9 13 13 8 9
2021 上半年 7 4 3 6 11 13 18 15
下半年 8 6 11 16 14 5 9 4
  1. 通过MultiIndex类的from_arrays或from_tuples方法,预先创建MultiIndex对象,作为Series与DataFrame中的index(或columns)参数值。
  • from_arrays:接收一个多维数组参数,高维指定高层索引,低维指定底层索引。
  • from_tuples:接收一个元组的列表,每个元组指定每个索引(高维索引,低维索引)。

In [10]:

# from_arrays 参数为一个二维数组,每个元素(一维数组)分别为每层索引的内容。
mindex_arrsys = pd.MultiIndex.from_arrays([["2020", "2020", "2021", "2021"], 
                                           ["上半年", "下半年", "上半年", "下半年"]])
df2 = pd.DataFrame(np.random.randint(2,20,size=(4, 6)), index=mindex_arrsys)#作为行索引
df2

Out[10]:

0 1 2 3 4 5
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

chenos121

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

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

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

打赏作者

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

抵扣说明:

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

余额充值