Pandas 多层索引操作的实现

 更新时间:2025年02月05日 10:35:18   作者:喜东东only  
本文主要介绍了Pandas 多层索引操作的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

Pandas 多层索引操作

多重索引的创建方式有很多,这里我们来看几个常见的方式:

(1)pd.MultiIndex.from_arrays

df = pd.DataFrame(
    [[621,582,621,591],
     [615,585,616,597],
     [581,574,579,585],
     [596,565,584,561]])
# 数组
# 每个数组对应着一个层级的索引值
arrays = [['北京','北京','上海','上海'],['北大','清华','上交','复旦']]
mindex = pd.MultiIndex.from_arrays(arrays, names=['城市','大学'])
# 给df行索引赋值
df.index = mindex

在这里插入图片描述

(2)pd.MultiIndex.from_frame

# dataframe
# 创建一个dataframe,方式与元组类似,每个元组对应一对多级索引值
frame = pd.DataFrame([('北京','北大'),('北京','清华'),('上海','上交'),('上海','复旦')])
mindex = pd.MultiIndex.from_frame(frame, names=['城市','大学'])
# 给df行索引赋值
df.index = mindex

在这里插入图片描述

(3)pd.MultiIndex.from_tuples

df = pd.DataFrame(
    [[621,582,621,591],
     [615,585,616,597],
     [581,574,579,585],
     [596,565,584,561]])
# 元组
# 每个元组是对应着一对多级索引
tuples = [('北京','北大'),('北京','清华'),('上海','上交'),('上海','复旦')]
mindex = pd.MultiIndex.from_tuples(tuples, names=['城市','大学']) 
# 给df行索引赋值
df.index = mindex

在这里插入图片描述

(4)pd.MultiIndex.from_product

当我们考虑迭代两个对象的元素对时,可以优先考虑使用pd.MultiIndex.from_product()来建立多重索引。

# product笛卡尔积

city = ['北京', '上海']
college = ['北大','清华','上交','复旦']
mindex1 = pd.MultiIndex.from_product([city,college], names=['城市','大学'])
mindex1

MultiIndex(levels=[['上海', '北京'], ['上交', '北大', '复旦', '清华']],
           codes=[[1, 1, 1, 1, 0, 0, 0, 0], [1, 3, 0, 2, 1, 3, 0, 2]],
           names=['城市', '大学'])

对两个序列生成笛卡尔积,即两两组合,结果如上。这种方式生成的索引和我们上面想要的形式不同,因此对行索引不适用

# product生成column列索引
year = ['2022','2023']
pro = ['计算机','土木']
mcol = pd.MultiIndex.from_product([year,pro], names=['年份','专业'])
 
# 对df的行索引、列索引赋值
df.index = mindex
df.columns = mcol
display(df)

在这里插入图片描述

np.r_[]用法:

np.r_[]函数是用于连接数组的函数,类似于concatenate函数,但可以在一维数组和多维数组之间进行拼接。具体用法如下:

使用np.r_[a, b]将两个数组a和b按行连接(在行方向上进行拼接)。
使用np.r_[a, b]对多个数组进行按行连接,可以同时连接多个数组。
使用np.r_[(a, b), (c, d)]将两个二维数组a和b按行连接,并将结果与二维数组c和d按行连接,最终得到一个拼接后的二维数组。
np.r_还支持切片操作,如np.r_[:5, 7:10]表示将索引为0到4的元素和索引为7到9的元素按行连接。
总而言之,np.r_[]函数可以在行方向上将多个数组或切片进行连接,生成一个新的数组。

读取excel方式

def index_info():
    address =os.path.join('.','index_def.xlsx')
    criterion = pd.read_excel(address)
    multi_idx1=criterion['分类'].unique()
    multi_idx2=criterion['二级分类'].unique()
    
    idx1 = [multi_idx1[0]]*3+[multi_idx1[2]]*3+[multi_idx1[3]]*16
    idx2 = [multi_idx2[0]]*3+['-']*3+[multi_idx2[2]]*6+[multi_idx2[3]]*6+[multi_idx2[4]]*4

    criterion.index=pd.MultiIndex.from_arrays([idx1,idx2,criterion.index+1],names=['一级分类','二级分类','编号'])
    ctr_df = criterion.iloc[:,np.r_[3,5]].fillna('-')
    return ctr_df
ctr_df = index_info()
ctr_df

到此这篇关于Pandas 多层索引操作的实现的文章就介绍到这了,更多相关Pandas 多层索引内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • 在Python中使用MySQL--PyMySQL的基本使用方法

    在Python中使用MySQL--PyMySQL的基本使用方法

    PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb。这篇文章主要介绍了在Python中使用MySQL--PyMySQL的基本使用,需要的朋友可以参考下
    2019-11-11
  • pycharm 关闭search everywhere的解决操作

    pycharm 关闭search everywhere的解决操作

    这篇文章主要介绍了pycharm 关闭search everywhere的解决操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • 利用setuptools打包python程序的方法步骤

    利用setuptools打包python程序的方法步骤

    这篇文章主要介绍了利用setuptools打包python程序的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • python selenium模拟点击问题解决方案

    python selenium模拟点击问题解决方案

    这篇文章主要介绍了python selenium模拟点击问题,涉及到安装谷歌浏览器和浏览器驱动的相关知识介绍,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • Python sklearn库三种常用编码格式实例

    Python sklearn库三种常用编码格式实例

    这篇文章主要为大家介绍了Python sklearn库三种常用编码格式实例展示,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • 关于数据分析Pandas的Series用法总结

    关于数据分析Pandas的Series用法总结

    这篇文章主要介绍了关于数据分析Pandas的Series用法总结,Series序列,是一种一维的结构,类似于一维列表和ndarray中的一维数组,但是功能比他们要更为强大,Series由两部分组成:索引index和数值values,本篇对其用法做出总结
    2023-07-07
  • python 实现打印扫描效果详情

    python 实现打印扫描效果详情

    这篇文章主要介绍了python 实现打印扫描效果详情,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-08-08
  • python 判断字符串当中是否包含字符(str.contain)

    python 判断字符串当中是否包含字符(str.contain)

    这篇文章主要介绍了python 判断字符串当中是否包含字符(str.contain),文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06
  • Python实现个人微信号自动监控告警的示例

    Python实现个人微信号自动监控告警的示例

    今天小编就为大家分享一篇Python实现个人微信号自动监控告警的示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • 使用pyqt 实现重复打开多个相同界面

    使用pyqt 实现重复打开多个相同界面

    今天小编就为大家分享一篇使用pyqt 实现重复打开多个相同界面,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12

最新评论