我们以标准导入开始: import pandas as pd import numpy as np 多重索引的序列 让我们首先考虑如何在一维Series中表示二维数据。...作为额外维度的MultiIndex 你可能会注意到其他内容:我们可以使用带有索引和列标签的简单DataFrame,来轻松存储相同的数据。事实上,Pandas 的构建具有这种等价关系。...具体而言,我们可能希望,每年为每个州添加另一列人口统计数据(例如,18 岁以下的人口); 使用MultiIndex就像在DataFrame中添加另一列一样简单: pop_df = pd.DataFrame...列的MultiIndex 在DataFrame中,行和列是完全对称的,就像行可以有多个索引层次一样,列也可以有多个层次。...DataFrame中是主要的,并且用于多重索引的Series的语法适用于列。
MultiIndex 剖析 MultiIndex 对于没有听说过Pandas的人来说,MultiIndex最直接的用法是使用第二个索引列作为第一个索引列的补充,可以更加独特地识别每一行。...lock和locked在简单的情况下自动工作(如客户名称),但在更复杂的情况下需要用户的提示(如缺少日子的星期)。...将MultiIndex转换为flat的索引并将其恢复 方便的查询方法只解决了处理行中MultiIndex的复杂性。...如果你需要与其他生态系统的互操作性,请关注更多的标准格式,如Excel格式(在读取MultiIndex时需要与read_csv一样的提示)。下面是代码: !...一种方法是将所有不相关的列索引层层叠加到行索引中,进行必要的计算,然后再将它们解叠回来(使用pdi.lock来保持原来的列顺序)。
层(维)比较好理解的例子就是地理位置,如行政区划(国家、省、市、县等)。 初始化多层索引 通过from_tuples元组生成 多层索引通过元组方式创建,这种方式索引的key存放在元组内。...多层索引由levels和codes构成。 注: 1 这里多维索引的levels是元组的元素的值。 2 这里多维索引的codes是对元组元素进行的编码,如0,1,2等。...#通过xs对多层索引对象的索引和列分别访问。...#指定索引序号,通过unstack将该索引转换为列。...#通过stack将列转回索引。
必须在左侧和右侧DataFrame对象中找到。 如果未传递且left_index和right_index为False,则DataFrame中的列的交集将被推断为连接键。...left_on:左侧DataFrame中的列或索引级别用作键。 可以是列名,索引级名称,也可以是长度等于DataFrame长度的数组。...right_on: 左侧DataFrame中的列或索引级别用作键。 可以是列名,索引级名称,也可以是长度等于DataFrame长度的数组。...对于具有MultiIndex(分层)的DataFrame,级别数必须与右侧DataFrame中的连接键数相匹配。 right_index: 与left_index功能相似。...如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
二、引入多级索引 (一)多级索引的创建 MultiIndex 对象是 Pandas 标准 Index 的子类,由它来表示多层索引业务。...1、基于列索引选取数据 # 基于列的第1层索引选取单列 scores['富强'] # 基于列的第1层索引选取多列,需要使用花式索引 scores[['富强','王亮']] 补充说明: 排序时默认按第一个字符的...# 基于列的第2层索引选取多列 scores.loc[:,(slice(None),['语文','数学'])] 其中的花式索引['语文','数学']表示选取 level 1 级列索引是语文和数学的两列...(3)未指明的高级别行/列索引需要用slice(None)表示取任意值(例如#1处的第1级列索引);未指明的低级别索引可以不写(例如#1处的第2级行索引);如果同级别的索引有多个(例如#1处的第2级列索引...[:,(列索引)];或者进一步简化成df[列索引](即loc行选择器和表示元组的圆括号都可以省略,例如#3处) (2)当只涉及行索引元组并且其中不包含slice(None)时,列索引元组可以用冒号(:
本质上,它使您能够在较低维数据结构(如Series(1d)和DataFrame(2d))中存储和操作具有任意数量维度的数据。..., dtype: float64 In [28]: s["qux"] Out[28]: one -1.039575 two 0.271860 dtype: float64 参见使用分层索引进行交叉选择以了解如何在更深层次上进行选择...与往常一样,切片器的两侧都包含在内,因为这是标签索引。 警告 在.loc指定器中应指定所有轴,即索引和列的索引器。...`的名称 `rename()`方法用于重命名`MultiIndex`的标签,通常用于重命名`DataFrame`的列。...特别是,可以指定 MultiIndex 级别的名称,如果稍后使用 reset_index() 将值从 MultiIndex 移动到列中,则这很有用。
] 常规创建 pop =pd.Series(age,index=index) MultiIndex创建 index= pd.MultiIndex.from_tuples(index) pop...= pop.reindex(index) 最原先的索引重置为multiindex pop[:,2010] 取出2010的所有数据 高维数据的多级索引: pop_df = pop.unstack...() 本质是生成一个a-f为行索引,年份为列索引的矩阵,缺失值用nan pop = pop_df.stack() 和unstack相反 多级索引创建: 直接将index参数设为二维... pd.MultiIndex.from_arrays([['a','a','b','b'],[1,2,1,2]]) pd.MultiIndex.from_tuples([('a',1),('a'...,2),('b',1),('b',2)]) 多级索引等级名称 pop.index.names=['name','year'] 以前面例子来说给name是a一列的名称,year是2010一列的形成
,MultiIndex.from_product,MultiIndex.from_tuples,MultiIndex.from_frame。...来生成column列索引。...# product生成column列索引 year = ['2022','2023'] pro = ['计算机','土木'] mcol = pd.MultiIndex.from_product([year...01列索引筛选 # 筛选列一级索引 df.loc[:,'2023'] df['2023'] # 同时筛选列一二级索引 df.loc[:,('2022','计算机')] df['2022','计算机']...比如,对列索引进行此操作,得到了元组形式的一二级索引对。
必须在左侧和右侧DataFrame对象中找到。 如果未传递且left_index和right_index为False,则DataFrame中的列的交集将被推断为连接键。...left_on:左侧DataFrame中的列或索引级别用作键。 可以是列名,索引级名称,也可以是长度等于DataFrame长度的数组。...right_on: 左侧DataFrame中的列或索引级别用作键。 可以是列名,索引级名称,也可以是长度等于DataFrame长度的数组。...对于具有MultiIndex(分层)的DataFrame,级别数必须与右侧DataFrame中的连接键数相匹配。 right_index: 与left_index功能相似。...suffixes: 用于重叠列的字符串后缀元组。 默认为(‘x’,’ y’)。 copy: 始终从传递的DataFrame对象复制数据(默认为True),即使不需要重建索引也是如此。
df1= df.set_index('Class') 第二次将某列设置为索引时,会丢弃原来的索引 df2 = df1.set_index('Address') 第二次指定索引时,必须指定参数 append...方法3:使用query方法,传入 次级索引名称等于指定值--需要使用引号 df_using_mul.query('Address == "street_1"') 相当于将内层索引当作列,等价于 select...df_using_mul.sort_index().loc[(['C_2','C_3'], ['street_1','street_4','street_7']),:] 多层索引中的slice对象 行索引和列索引均有两个层级...索引Slice的使用非常灵活 df_s.sum()默认为对列求和,因此返回一个长度为9的数值列表。...接下来使用pd.IndexSlice函数找出那些列的和大于4的列,分解开来看--列的筛选。
本文就将带大家学习如何在pandas中化繁为简,利用query()和eval()来实现高效简洁的数据查询与运算。...除了对常规字段进行条件筛选,query()还支持对数据框自身的index进行条件筛选,具体可分为三种情况: 「常规index」 对于只具有单列Index的数据框,直接在表达式中使用index: # 找出索引列中包含...」 对于MultiIndex的情况,可分为两种,首先我们来看看MultiIndex的names为空的情况,按照顺序,用ilevel_n表示MultiIndex中的第n列index: # 构造含有MultiIndex...」 而对于MultiIndex的names有内容的情况,直接用对应的名称传入表达式即可: # 构造含有MultiIndex的数据框,并重置index的names为None temp = netflix.set_index...同样从实际例子出发,同样针对「netflix」数据,我们按照一定的计算方法为其新增两列数据,对基于assign()的方式和基于eval()的方式进行比较,其中最后一列是False是因为日期转换使用coerce
什么是多重/分层索引 多重/分层索引(MultiIndex)可以理解为堆叠的一种索引结构,它的存在为一些相当复杂的数据分析和操作打开了大门,尤其是在处理高纬度数据的时候就显得十分地便利,我们首先来创建带有多重索引的...DataFrame数据集 多重索引的创建 首先在“列”方向上创建多重索引,即我们在调用columns参数时传递两个或者更多的数组,代码如下 df1 = pd.DataFrame(np.random.randint...,分别是 pd.MultiIndex.from_arrays pd.MultiIndex.from_frame pd.MultiIndex.from_tuples pd.MultiIndex.from_product...,我们可以看到是“城市”以及“日期”这两个维度,而在“列”索引上,我们看到的是则是“不同时间段”以及一些“气温”等指标,首先来看一下“列”方向多重索引的层级,代码如下 df.columns.levels...pandas import IndexSlice as idx df.loc[ idx[: , '2019-07-04'], 'Day' ] output 我们同时可以指定行以及列方向上的索引来进行数据的提取
6种方式创建多层索引MultiIndex pd.MultiIndex即具有多个层次的索引。通过多层次索引,我们就可以操作整个索引组的数据。...本文主要介绍在Pandas中创建多层索引的6种方式: pd.MultiIndex.from_arrays():多维数组作为参数,高维指定高层索引,低维指定低层索引。...pd.MultiIndex.from_tuples():元组的列表作为参数,每个元组指定每个索引(高维和低维索引)。...pd.MultiIndex.from_product():一个可迭代对象的列表作为参数,根据多个可迭代对象元素的笛卡尔积(元素间的两两组合)进行创建索引。..."age":[23,39,34], "sex":["male","male","female"]}) df 直接生成了多层索引,名字就是现有数据框的列字段: In [
本文就将带大家学习如何在pandas中化繁为简,利用query()和eval()来实现高效简洁的数据查询与运算。 ?...Index的数据框,直接在表达式中使用index: # 找出索引列中包含king的记录,忽略大小写 netflix.set_index('title').query("index.str.contains...图10 names为空的MultiIndex 对于MultiIndex的情况,可分为两种,首先我们来看看MultiIndex的names为空的情况,按照顺序,用ilevel_n表示MultiIndex...中的第n列index: # 构造含有MultiIndex的数据框,并重置index的names为None temp = netflix.set_index(['title', 'type']);temp.index.names...同样从实际例子出发,同样针对netflix数据,我们按照一定的计算方法为其新增两列数据,对基于assign()的方式和基于eval()的方式进行比较,其中最后一列是False是因为日期转换使用coerce
重新排列表格型数据的基础运算称之为重塑reshape或者轴向旋转pivot stack:将数据的列旋转成行,AB由列属性变成行索引 unstack:将数据的行旋转成列,AB由行索引变成列属性 重点知识...层次化索引 MultiIndex 数据分散在不同的文件或者数据库中 层次化索引在⼀个轴上拥有多个(两个以上)索引级别 低维度形式处理高维度数据 import pandas as pd import numpy...res.unstack(0) # 实现了将行索引和列属性的位置互换 # res.unstack('state') 同上功能 state Inhio Colorado number...b 1 c 2 d 3 two c 4 d 5 e 6 dtype: int64 data1.unstack() # 行索引转成列属性...(tuples, names=['first', 'second']) # 错层次索引如何创建 # index = pd.MultiIndex.from_tuples(tuples, names=['
Pandas merge用法解析(用Excel的数据为例子) 【知识点】 语法: 参数如下: left: 拼接的左侧DataFrame对象 right: 拼接的右侧DataFrame对象 on: 要加入的列或索引级别名称...必须在左侧和右侧DataFrame对象中找到。如果未传递且left_index和right_index为False,则DataFrame中的列的交集将被推断为连接键。...left_on:左侧DataFrame中的列或索引级别用作键。可以是列名,索引级名称,也可以是长度等于DataFrame长度的数组。 right_on: 左侧DataFrame中的列或索引级别用作键。...对于具有MultiIndex(分层)的DataFrame,级别数必须与右侧DataFrame中的连接键数相匹配。 right_index: 与left_index功能相似。...suffixes: 用于重叠列的字符串后缀元组。默认为(‘x’,’ y’)。 copy: 始终从传递的DataFrame对象复制数据(默认为True),即使不需要重建索引也是如此。
参考链接: Pandas的布尔索引 一、索引器 表的列索引 列索引是最常见的索引形式,一般通过 [] 来实现。...表达式,其返回值也同样必须是先前提到的四种形式之一: df_demo.loc[lambda x:'Quan Zhao', lambda x:'Gender'] # 'Female' 由于函数无法返回如...与单层索引的表一样,具备元素值、行索引和列索引三个部分。其中,这里的行索引和列索引都是 MultiIndex 类型,只不过 索引中的一个元素是元组 而不是单层索引中的标量。...与单层索引类似, MultiIndex 也具有名字属性,图中的 School 和 Gender 分别对应了表的第一层和第二层行索引的名字, Indicator 和 Grade 分别对应了第一层和第二层列索引的名字...,后一个是列索引。
import numpy as np import pandas as pd 一、通过多级索引创建数据透视表 利用多级索引产生学生成绩表: r_index = pd.MultiIndex.from_product...]], names=['年份', '学期']) 查看多级列索引: scores.columns MultiIndex(levels=[['富强', '李海', '王亮'], ['数学...(默认是把最低级列索引变成最低级行索引),此时行索引有3级。...),此时行索引和列索引分别有2级。...,需要用level参数指定; (2)set_index可以把普通的列变成索引(如果是多个普通的列就会变成多级索引),而reset_index可以索引还原成普通的列,并用0开始的整数序列作为新索引; (3
pivot pivot函数用于从给定的表中创建出新的派生表 pivot有三个参数: 索引 列 值 def pivot_simple(index, columns, values): """...堆叠DataFrame意味着移动最里面的列索引成为最里面的行索引,反向操作称之为取消堆叠,意味着将最里面的行索引移动为最里面的列索引。...(['r0', 'r0'], ['r-00', 'r-01'])) row_idx = pd.MultiIndex.from_tuples(row_idx_arr) print "行索引:" print...row_idx # 建立多个列索引 col_idx_arr = list(zip(['c0', 'c0', 'c1'], ['c-00', 'c-01', 'c-10'])) col_idx = pd.MultiIndex.from_tuples...: MultiIndex(levels=[[u'r0'], [u'r-00', u'r-01']], labels=[[0, 0], [0, 1]]) ## 列索引: MultiIndex
多级索引(MultiIndex)以及命名索引的不同等级 多级索引其实就是一个由元组(Tuple)组成的数组,每一个元组都是独一无二的。...你可以从一个包含许多数组的列表中创建多级索引(调用 MultiIndex.from_arrays ),也可以用一个包含许多元组的数组(调用 MultiIndex.from_tuples )或者是用一对可迭代对象的集合...(比如两个列表,互相两两配对)来构建(调用MultiIndex.from_product )。...index 表示按该列进行分组索引,而 columns 则表示最后结果将按该列的数据进行分列。...你可以在 Pandas 的官方文档 中找到更多数据透视表的详细用法和例子。 于是,我们按上面的语法,给这个动物统计表创建一个数据透视表: ? 或者也可以直接调用 df 对象的方法: ?
领取专属 10元无门槛券
手把手带您无忧上云