pandas中DataFrame多层索引的实现

 更新时间:2024年12月31日 09:54:34   作者:m0_62172798  
本文主要介绍了pandas中DataFrame多层索引的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

1、创建

相较于一层索引,在创建多层索引时给字段添加关系,其创建方法包括运用元组、数组、笛卡尔积,在普通DataFrame中创立。

 1.1方式一使用pd.MultiIndex.from_tuples创建索引

tuples为元组 含义就是使用pandas中用元组建立多层索引

import pandas as pd
import numpy as np

#这里创建的两层索引,姓名、考试
index_lables=[('张三','期中'),('张三','期末'),('李四','期中'),('李四','期末')]

mult_index = pd.MultiIndex.from_tuples(index_lables,names=('name','exam'))

data = {
    'python':[98,149,130,147],
    'math':[95,78,143,104]
}
df=pd.DataFrame(data,index=mult_index)

1.2方式二:使用pd.MultiIndex.from_arrays(数组)

index_labels = [['张三','张三','李四','李四'],['期中','期末','期中','期末']]

mult_index=pd.MultiIndex.from_arrays(index_labels,names=('name','exam'))
df=pd.DataFrame(data,index=mult_index)

1.3方式三:使用pd.MultiIndex.from_product(笛卡尔积)

index_lables=pd.MultiIndex.from_product([['张三','李四','王五','赵六'],
                                        ['期中','期末']],
                                        names=['name','exam'])
df=pd.DataFrame(np.random.randint(80,150, size=(8,2)),
                index=index_lables,
                columns=['python','math']
                )

df1=pd.DataFrame(np.random.randint(80,150,size=(2,4)),
                 index=['张三','李四'],
                 columns=pd.MultiIndex.from_product([['python','math'],['期中','期末']]))

笛卡尔积使用的不同其创建的dataframe也不同

df1

df

1.4方式四在已有的DataFrame基础上创建

使用set_index方法进行创建

参数

keys,要设置为索引的列名(如有多个应放在一个列表里)

drop: bool = True,将设置为索引的列删除,默认为True

append: bool = False,是否将新的索引追加到原索引后(即是否保留原索引),默认为False

inplace: bool = False, 是否在原DataFrame上修改,默认为False

verify_integrity: bool = False,是否检查索引有无重复,默认为False

 示例:

import pandas as pd
import numpy as np

data={
    'year':[2020,2020,2021,2021,2022,2022],
    'quarter':[1,2,1,2,1,2],
    'sales':[100,150,120,130,140,180],
    'profit':[50,80,80,100,30,80]
}
df=pd.DataFrame(data)
print(df)
df.set_index(['year','quarter'],inplace=True)
print(df)

2、筛选数据

多层索引的DataFrame的index(每一行的下标)为元组

print(df.index)

在筛选数据时,与普通的DataFrame一致,可以通过标签、位置、字段名、切片进行筛选

根据标签索引

print(df.loc[[2020,2021]])
print(df.loc[(2020,1)])#与df.loc[2020].loc[1]一致
print(df.loc[[(2020,1),(2020,2)]])
print(df.loc[(2020,1):(2021,2)])

 根据位置索引

print(df.iloc[[0,1]])
print(df.iloc[0:4,[0]])#如果‘,'的0不加[],则该列为series

3、分层计算

 之前DataFrame的统计函数有level参数,能够给多层索引DataFrame运用,但已被舍弃,现在想要运算需要使用:DataFrame.groupby(level=层数).函数名()

我们以例子进行说明:(这个输出的DataFrame有点丑,别介意)

import pandas as pd
import numpy as np

df=pd.DataFrame(np.random.randint(0,151,size=(40,3)),
                index=pd.MultiIndex.from_product([ list('ABCDEFGHIJ'),['期中','期末'],['平时成绩','考试成绩']]),
                columns=['math','python','english']
                )
print(df)

 我们先来看层级,最左边的标签为字母,然后是“期中/期末”,最后是成绩类别,所以对应的层数为0,1,2。弄清楚之后,我们使用代码看看运算结果。

print(df.groupby(level=0).mean())
print(df.groupby(level=1).mean())
print(df.groupby(level=2).mean())

level=1

level=1

level=2|level=3

 可以看出,level=0时,根据每个同学的其他4项计算各科平均分,level=1时,计算期中期末的平均分。

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

相关文章

  • 从基础到进阶详解Python字符串统计的实用指南

    从基础到进阶详解Python字符串统计的实用指南

    字符串处理是编程中最基础也最常见的任务之一,本文将用通俗易懂的方式,带你全面了解如何用Python实现字符串统计,涵盖从最基础的计数到高级的文本分析技巧,感兴趣的小伙伴可以了解下
    2025-11-11
  • Python日志模块logging的使用方法总结

    Python日志模块logging的使用方法总结

    这篇文章主要分享的是Python日志模块logging的使用方法总结,ogging模块默认级别是WARNING,意味着只会追踪该级别以上的事件,除非更改日志配置,想了解更多相关资料的小伙伴可以参考下面文章内容
    2022-05-05
  • python super用法及原理详解

    python super用法及原理详解

    这篇文章主要介绍了python super用法及原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • Python使用统计函数绘制简单图形实例代码

    Python使用统计函数绘制简单图形实例代码

    这篇文章主要给大家介绍了关于Python使用统计函数绘制简单图形的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Python具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-05-05
  • Python sys模块中maxsize()方法教程示例

    Python sys模块中maxsize()方法教程示例

    这篇文章主要为大家介绍了Python sys模块中maxsize()方法教程示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • Python实现遗传算法(虚拟机中运行)

    Python实现遗传算法(虚拟机中运行)

    遗传算法(GA)是最早由美国Holland教授提出的一种基于自然界的“适者生存,优胜劣汰”基本法则的智能搜索算法。本文主要介绍了如何通过Python实现遗传算法,感兴趣的同学可以看一看
    2021-11-11
  • 详解Python之数据序列化(json、pickle、shelve)

    详解Python之数据序列化(json、pickle、shelve)

    本篇文章主要介绍了Python之数据序列化,本节要介绍的就是Python内置的几个用于进行数据序列化的模块,有兴趣的可以了解一下。
    2017-03-03
  • 浅谈python socket函数中,send与sendall的区别与使用方法

    浅谈python socket函数中,send与sendall的区别与使用方法

    下面小编就为大家带来一篇浅谈python socket函数中,send与sendall的区别与使用方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • Python输出\u编码将其转换成中文的实例

    Python输出\u编码将其转换成中文的实例

    今天小编就为大家分享一篇Python输出\u编码将其转换成中文的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • 如何使用python生成大量数据写入es数据库并查询操作

    如何使用python生成大量数据写入es数据库并查询操作

    这篇文章主要介绍了如何使用python生成大量数据写入es数据库并查询操作,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09

最新评论