我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Pandas数据分析-pandas数据框的多层索引

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Pandas数据分析-pandas数据框的多层索引

前言

pandas数据框针对高维数据,也有多层索引的办法去应对。多层数据一般长这个样子

可以看到AB两大列,下面又有xy两小列。 行有abc三行,又分为onetwo两小行。

在分组聚合的时候也会产生多层索引,下面演示一下。

导入包和数据:

import numpy as np 
import pandas as pd
df=pd.read_excel('team.xlsx')

分组聚合:

df.groupby(['team',df.mean(1)>60]).count() #每组平均分大于60的人的个数

 可以看到分为abcde五组,平均分大于60 的组员两小行。

创建多层索引

#序列中创建
arrays = [[1, 1, 2, 2], ['red', 'blue', 'red', 'blue']]
index=pd.MultiIndex.from_arrays(arrays, names=('number', 'color'))
index

pd.DataFrame([{'a':1, 'b':2}], index=index)

#来自元组创建
arrays = [['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux'],
          ['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two']]
tuples = list(zip(*arrays))
index = pd.MultiIndex.from_tuples(tuples, names=['first', 'second'])
pd.Series(np.random.randn(8), index=index)

#可迭代对象的笛卡尔积,排列组合各种情况
numbers = [0, 1, 2]
colors = ['green', 'purple']
index = pd.MultiIndex.from_product([numbers, colors],names=['number', 'color'])
pd.Series(np.random.randn(6), index=index)

#来自 DataFrame
df = pd.DataFrame([['bar', 'one'], ['bar', 'two'],
                   ['foo', 'one'], ['foo', 'two']],
                  columns=['first', 'second'])
'''
  first second
0   bar    one
1   bar    two
2   foo    one
3   foo    two
'''
index = pd.MultiIndex.from_frame(df)
pd.Series(np.random.randn(4), index=index)

 多层索引操作

index_arrays = [[1, 1, 2, 2], ['男', '女', '男', '女']]
columns_arrays = [['2020', '2020', '2021', '2021'],
                  ['上半年', '下半年', '上半年', '下半年',]]
index = pd.MultiIndex.from_arrays(index_arrays,names=('班级', '性别'))
columns = pd.MultiIndex.from_arrays(columns_arrays,names=('年份', '学期'))
df = pd.DataFrame([(88,99,88,99),(77,88,97,98),
                   (67,89,54,78),(34,67,89,54)],columns=columns, index=index)
df

 索引名称的查看

#索引名称的查看:
df.index # 索引, 是一个 MultiIndex
df.columns # 引索引,也是一个 MultiIndex
# 查看行索引的名称
df.index.names # FrozenList(['班级', '性别'])
# 查看列索引的名称
df.columns.names # FrozenList(['年份', '学期'])

 索引的层级

#索引的层级:
df.index.nlevels # 层级数   2
df.index.levels # 行的层级    # FrozenList([[1, 2], ['女', '男']])
df.columns.levels # 列的层级  # FrozenList([['2020', '2021'], ['上半年', '下半年']])
df[['2020','2021']].index.levels # 筛选后的层级  # FrozenList([[1, 2], ['女', '男']])

 索引内容的查看

#索引内容的查看:
# 获取索引第2层内容
df.index.get_level_values(1)
# Index(['男', '女', '男', '女'], dtype='object', name='性别')
# 获取列索引第1层内容
df.columns.get_level_values(0)
# Index(['2020', '2020', '2021', '2021'], dtype='object', name='年份')
 
# 按索引名称取索引内容
df.index.get_level_values('班级')
# Int64Index([1, 1, 2, 2], dtype='int64', name='班级')
df.columns.get_level_values('年份')
# Index(['2020', '2020', '2021', '2021'], dtype='object', name='年份')
 
# 多层索引的数据类型,1.3.0+
df.index.dtypes

 #排序

# 使用索引名可进行排序,可以指定具体的列
df.sort_values(by=['性别', ('2020','下半年')])
df.index.reorder_levels([1,0])  # 等级顺序,互换
df.index.set_codes([1, 1, 0, 0], level='班级') # 设置顺序
df.index.sortlevel(level=0, ascending=True)   # 按指定级别排序
df.index.reindex(df.index[::-1]) # 更换顺序,或者指定一个顺序

 相关操作转换:

df.index.to_numpy() # 生成一个笛卡尔积的元组对列表
# array([(1, '男'), (1, '女'), (2, '男'), (2, '女')], dtype=object)
df.index.remove_unused_levels() # 返回没有使用的层级
df.swaplevel(0, 2) # 交换索引
df.to_frame() # 转为 DataFrame
idx.set_levels(['a', 'b'], level='bar') # 设置新的索引内容
idx.set_levels([['a', 'b', 'c'], [1, 2, 3, 4]], level=[0, 1])
idx.to_flat_index()   # 转为元组对列表
df.index.droplevel(0) # 删除指定等级
df.index.get_locs((2, '女'))  # 返回索引的位置

数据查询

#查询指定行
df.loc[1] #一班的
df.loc[(1, '男')] # 一年级男
df.loc[1:2] # 一二两年级数据

#查询指定列
df['2020'] # 整个一级索引下
df[('2020','上半年')] # 指定二级索引
df['2020']['上半年'] # 同上

#行列综合  slice(None)表示本层所有内容
df.loc[(1, '男'), '2020'] # 只显示2020年一年级男
df.loc[:, (slice(None), '下半年')] # 只看下半年的
df.loc[(slice(None), '女'),:] # 只看女生
df.loc[1, (slice(None)),:] # 只看1班
df.loc[:, ('2020', slice(None))] # 只看 2020 年的

#查询指定条件

#和单层索引的数据查询一样,不过在选择列上要按多层的规则。
df[df[('2020','上半年')] > 80]

#pd.IndexSlice切片使用:
 
idx = pd.IndexSlice
idx[0]               # 0
idx[:]               # slice(None, None, None)
idx[0,'x']           # (0, 'x')
idx[0:3]             # slice(0, 3, None)
idx[0.1:1.5]         # slice(0.1, 1.5, None)
idx[0:5,'x':'y']     # (slice(0, 5, None), slice('x', 'y', None))
#查询应用:
idx = pd.IndexSlice
df.loc[idx[:,['男']],:] # 只显示男
df.loc[:,idx[:,['上半年']]] # 只显示上半年
 
#df.xs()
df.xs((1, '男')) # 一年级男生
df.xs('2020', axis=1) # 2020 年
df.xs('男', level=1) # 所有男生

 数据分组

df.groupby(level=0).sum()
df.groupby(level='性别').sum()
df.sum(level='班级') # 也可以直接统计

df.groupby(level=['性别', '班级']).sum()

到此这篇关于Pandas数据分析-andas数据框的多层索引的文章就介绍到这了,更多相关pandas多层索引内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Pandas数据分析-pandas数据框的多层索引

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python数据分析:pandas中Dataframe的groupby与索引用法

Pandasgroupby操作允许根据键对DataFrame数据进行分组,而索引提供快速查找DataFrame特定行的机制。结合使用可高效分析大型数据集。groupby根据键分组数据,返回按键分组的组,可使用apply()/agg()/transform()方法对组应用聚合函数或操作。索引唯一标识每一行,可通过loc和iloc方法访问和检索行。结合groupby和索引,可以高效执行高级数据操作,如按组索引、迭代和过滤。
Python数据分析:pandas中Dataframe的groupby与索引用法
2024-04-02

python数据分析之pandas数据选

Pandas是作为Python数据分析著名的工具包,提供了多种数据选取的方法,方便实用。本文主要介绍Pandas的几种数据选取的方法。  Pandas中,数据主要保存为Dataframe和Series是数据结构,这两种数据结构数据选取的方式
2023-01-30

计算多索引 pandas 数据帧外部索引每行的总和

问题内容我有一个数据框:seller、item、price、shipping、免费送货最低、count available和count required。我的目标是根据稍后计算的 total 找到 seller 和 item 的最便宜的组
计算多索引 pandas 数据帧外部索引每行的总和
2024-02-05

Python数据分析之pandas读取数据

一、三种数据文件的读取二、csv、tsv、txt 文件读取 1)CSV文件读取: 语法格式:pandas.read_csv(文件路径) CSV文件内容如下:import pandas as pd file_path = "e:\\panda
2022-06-02

数据分析利器之Pandas

Pandas是一个python的开源库,它基于Numpy,提供了多种高性能且易于使用的数据结构。Pandas最初被用作金融数据分析工具而开发,由于它有着强大的功能,目前广泛应用于数据分析、机器学习以及量化投资等。下面来跟随作者一起认识下Pa
2023-06-02

数据分析之pandas模块

一、Series  类似于一位数组的对象,第一个参数为数据,第二个参数为索引(索引可以不指定,就默认用隐式索引)Series(data=np.random.randint(1,50,(10,)))Series(data=[1,2,3],in
2023-01-30

数据分析之Pandas VS SQL!

编辑:zone来源:数据管道作者:艾德宝器AbstractPandas是一个开源的Python数据分析库,结合 NumPy 和 Matplotlib 类库,可以在内存中进行高性能的数据清洗、转换、分析及可视化工作。对于数据开发工程师或分析师
2023-06-02

Python数据分析--Pandas知识

本文主要是总结学习pandas过程中用到的函数和方法, 在此记录, 防止遗忘1. 重复值的处理利用drop_duplicates()函数删除数据表中重复多余的记录, 比如删除重复多余的ID.1 import pandas as pd2 df
2023-01-30

Pandas数据分析的环境准备

一、Python编程基础知识建议可以直接从官方文档学起,质量较高,现在也支持中文了,比以前友好很多Python官方入门中文教程Python运用较多的几个领域Web开发、科学计算、IT运维,我们使用Python来进行数据分析工作是属于科学计算
2023-01-31

Pandas数据存储的示例分析

这篇文章主要为大家展示了“Pandas数据存储的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Pandas数据存储的示例分析”这篇文章吧。数据的存储数据可以有两种类型-连续的和离散的,这
2023-06-27

Python数据分析库之pandas,你

写这个系列背后的故事咦,面试系列的把基础部分都写完啦,哈哈答,接下来要弄啥嘞~pandas吧外国人开发的翻译成汉语叫 熊猫厉害厉害,很接地气一个基于numpy的库干啥的?做数据分析用的而数据分析是python体系下一个非常庞大的分支厉害到,
2023-01-31

Pandas数据分析常用函数的使用

本文主要介绍了Pandas数据分析常用函数的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-01-16

保留数据类型的空 pandas 数据框

问题内容我想用保留的数据类型创建一个空的 df 作为模板。代码如下:import pandas as pdimport datetimefrom dataclasses import dataclass@dataclassclas
保留数据类型的空 pandas 数据框
2024-02-22

数据分析处理库Pandas——数据透视表

数据 按指定的行列值显示 求和 按行求和 按列求和 数据 求平均 备注:按性别计算每个等级船票的平均价格。 备注:每个等级船舱中每种性别获救的平均值,也就是获救的比例。 备注:每种性别未成年人获救的平均值,也就是获救的比例。 求最大值 备注
2023-01-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录