-
2020-09-22 07:05:27
python3 的index函数只能索引要查找元素的首个索引,这个在多数情况是不能满足索引要求的。而enumerate函数可以遍历所有元素,可以利用这个函数+列表推导式实现获取所有重复元素的索引值。实现方式如下:
listA=[1,2,3,2] #比如要查找列表中的数字2。
indexA=[x for (x,y) in enumerate(listA) if y==m ]
indexA
输出:[1,4]
可以写成函数以方便调用:
def indexA (listA,m):
return [x for (x,y) in enumerate(listA) if y==m ]
使用:
indexA([1,2,3,4,3,2,2] ,2)
输出:[1, 5, 6]
indexA([1,2,3,4,3,2,2],3)
输出:[2, 4]
更多相关内容 -
pandas 难以置信的多重索引1——多重索引的构建(史上最全)
2020-10-22 21:57:31分层/多级索引是非常令人兴奋的,因为它为一些相当复杂的数据分析和操作打开了大门,特别是对于处理高维数据。实际上,它使您能够在较低维的数据结构...一、创建多重索引(分层索引)对象 多索引对象是标准索引对象的分层/多级索引是非常令人兴奋的,因为它为一些相当复杂的数据分析和操作打开了大门,特别是对于处理高维数据。实际上,它使您能够在较低维的数据结构(如Series (1d)和DataFrame (2d))中存储和操作具有任意维数的数据。
在本节中,我们将展示“分层”索引的确切含义,以及它如何与上面和前面几节中描述的所有panda索引功能集成。稍后,在讨论对数据进行分组、旋转和重塑时,我们将展示一些重要的应用程序,以说明它如何帮助结构化数据以便进行分析。一、创建多重索引(分层索引)对象
多索引对象是标准索引对象的层次模拟对象,标准索引对象通常在pandas对象中存储axis标签。您可以将MultiIndex看作元组数组,其中每个元组都是唯一的。可以从数组列表(使用MultiIndex.from_arrays())、元组数组(使用MultiIndex.from_tuples())、交叉迭代集(使用MultiIndex.from_product())或DataFrame(使用MultiIndex.from_frame())创建多索引。当向索引构造函数传递一组元组时,它将尝试返回一个多索引。下面的示例演示了初始化多索引的不同方法。
import pandas as pd import numpy as np arrays = [['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux'],\ ['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two']] tuples = list(zip(*arrays)) tuples ''' [('bar', 'one'), ('bar', 'two'), ('baz', 'one'), ('baz', 'two'), ('foo', 'one'), ('foo', 'two'), ('qux', 'one'), ('qux', 'two')] ''' index = pd.MultiIndex.from_tuples(tuples, names=['first', 'second']) ''' MultiIndex([('bar', 'one'), ('bar', 'two'), ('baz', 'one'), ('baz', 'two'), ('foo', 'one'), ('foo', 'two'), ('qux', 'one'), ('qux', 'two')], names=['first', 'second']) ''' s = pd.Series(np.random.randn(8), index=index) s ''' first second bar one 0.606254 two -1.193545 baz one 1.226008 two 0.486978 foo one 1.469800 two 0.338351 qux one -0.892168 two -0.650476 dtype: float64 '''
当你想要两个迭代中的每一对元素时,使用MultiIndex.from_product()方法会更容易:
这种貌似是最简单的哇,记住pd.MultiIndex.from_product
iterables = [['bar', 'baz', 'foo', 'qux'], ['one', 'two']] pd.MultiIndex.from_product(iterables, names=['first', 'second']) ''' MultiIndex([('bar', 'one'), ('bar', 'two'), ('baz', 'one'), ('baz', 'two'), ('foo', 'one'), ('foo', 'two'), ('qux', 'one'), ('qux', 'two')], names=['first', 'second']) '''
您还可以使用MultiIndex.from_frame()方法直接从一个DataFrame构造一个多索引。这是MultiIndex.to_frame()的补充方法。
*作者感觉这种是最麻烦的,不过挺检验对多维数组的掌握,建议手打一下*df = pd.DataFrame([['bar', 'one'], ['bar', 'two'],['baz', 'one'],['baz', 'two'], ['foo', 'one'], ['foo', 'two'], ['qux', 'one'],['qux', 'two']], columns=['first', 'second']) pd.MultiIndex.from_frame(df) ''' MultiIndex([('bar', 'one'), ('bar', 'two'), ('baz', 'one'), ('baz', 'two'), ('foo', 'one'), ('foo', 'two'), ('qux', 'one'), ('qux', 'two')], names=['first', 'second']) '''
为了方便,你可以直接将数组列表传递到Series或DataFrame来自动构造一个多索引:
arrays = [np.array(['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux']), np.array(['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two'])] arrays ''' [array(['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux'], dtype='<U3'), array(['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two'], dtype='<U3')] ''' s = pd.Series(np.random.randn(8), index=arrays) # 创建耽搁Series试试 s ''' bar one 0.042885 two 1.075552 baz one -0.437966 two 0.624236 foo one 0.101495 two 0.639600 qux one -0.260703 two -0.881295 dtype: float64 ''' df = pd.DataFrame(np.random.randn(8,4), index=arrays) df ''' 0 1 2 3 bar one -0.424972 0.567020 0.276232 -1.087401 two -0.673690 0.113648 -1.478427 0.524988 baz one 0.404705 0.577046 -1.715002 -1.039268 two -0.370647 -1.157892 -1.344312 0.844885 foo one 1.075770 -0.109050 1.643563 -1.469388 two 0.357021 -0.674600 -1.776904 -0.968914 qux one -1.294524 0.413738 0.276662 -0.472035 two -0.013960 -0.362543 -0.006154 -0.923061 '''
所有的多索引构造函数都接受一个names参数,该参数存储级别本身的字符串名称。如果没有提供姓名,则不会分配:
df.index.names ''' FrozenList([None, None]) '''
这个索引可以返回pandas对象的任何轴,索引的级别由您决定:
df = pd.DataFrame(np.random.randn(3,8),index=['A', 'B', 'C'], coolums=index) df ''' first bar baz foo qux second one two one two one two one two A 0.895717 0.805244 -1.206412 2.565646 1.431256 1.340309 -1.170299 -0.226169 B 0.410835 0.813850 0.132003 -0.827317 -0.076467 -1.187678 1.130127 -1.436737 C -1.413681 1.607920 1.024180 0.569605 0.875906 -2.211372 0.974466 -2.006747 ''' df = pd.DataFrame(np.random.randn(6,6), index=index[:6], columns=index[:6]) df ''' first bar baz foo second one two one two one two first second bar one -0.410001 -0.078638 0.545952 -1.219217 -1.226825 0.769804 two -1.281247 -0.727707 -0.121306 -0.097883 0.695775 0.341734 baz one 0.959726 -1.110336 -0.619976 0.149748 -0.732339 0.687738 two 0.176444 0.403310 -0.154951 0.301624 -2.179861 -1.369849 foo one -0.954208 1.462696 -1.743161 -0.826591 -0.345352 1.314232 two 0.690579 0.995761 2.396780 0.014871 3.357427 -0.317441 '''
我们已经“分散”了更高级别的索引,以使控制台输出对你来说更容易一些。注意索引的显示方式可以通过pandas.set_options()中的multi_sparse选项来控制:
元组是标签的必备之选pd.Series(np.random.randn(8), index=tuples) ''' (bar, one) 0.146193 (bar, two) 0.011110 (baz, one) 0.698768 (baz, two) 0.277018 (foo, one) -0.014839 (foo, two) -0.348363 (qux, one) 0.680304 (qux, two) 0.299718 dtype: float64 '''
多索引很重要的原因是,它允许您执行分组、选择和重塑操作,我们将在下面和文档的后续部分中描述这些操作。正如您将在后面几节中看到的,您会发现自己使用分层索引的数据,而无需自己显式地创建多索引。但是,当从文件加载数据时,您可能希望在准备数据集时生成自己的多索引。
#########################################################
写在最后:
自己和朋友成立了一个工作室——图灵数据科学工作室(VX:DataUpward):
一是想和大家交个朋友;
二是想帮助朋友们跳过我们遇到的坑,尽快找到解决办法。======================================================
工作室的运行也需要付出各种成本,“活下去”是我们的当务之急,如果大家有 :- 数据分析(报告);
- 商业数据调研;
- 数据可视化展示;
- 数据爬虫;
- -数据模型开发;
- 机器学习算法挖掘
- …
也欢迎和我们工作室开展合作~
-
pandas 难以置信的多重索引2——获取多重索引的值(史上最全)
2020-10-22 22:27:29我们平时使用到的多重索引,但是网上很少有人介绍如果获取多重索引本身的值,这部分的内容比上一节更加实用 获取多重索引的标签值 get_level_values()方法将返回一个特定级别上每个位置的标签向量: iterables = [['...我们平时使用到的多重索引,但是网上很少有人介绍如果获取多重索引本身的值,这部分的内容比上一节更加实用
获取多重索引的标签值
get_level_values()方法将返回一个特定级别上每个位置的标签向量:
iterables = [['bar', 'baz', 'foo', 'qux'], ['one', 'two']] arrays = pd.MultiIndex.from_product(iterables, names=['first', 'second']) arrays ''' MultiIndex([('bar', 'one'), ('bar', 'two'), ('baz', 'one'), ('baz', 'two'), ('foo', 'one'), ('foo', 'two'), ('qux', 'one'), ('qux', 'two')], names=['first', 'second']) ''' df = pd.DataFrame(np.random.randn(7,7), index=arrays[:7], columns=arrays[:7]) df
查看行|列的所有索引
获取行|列索引
获取特定的行|列索引
对索引进行转换类型
我当时全网找了好久,才在官网上发现了这些技巧,总结了一下,希望对你有帮助。
#########################################################
写在最后:
自己和朋友成立了一个工作室——图灵数据科学工作室(VX:DataUpward):
一是想和大家交个朋友;
二是想帮助朋友们跳过我们遇到的坑,尽快找到解决办法。======================================================
工作室的运行也需要付出各种成本,“活下去”是我们的当务之急,如果大家有 :- 数据分析(报告);
- 商业数据调研;
- 数据可视化展示;
- 数据爬虫;
- -数据模型开发;
- 机器学习算法挖掘
- …
也欢迎和我们工作室开展合作~
-
Pandas多重索引使用详解
2020-12-31 07:14:53多重索引被定义为非常重要的索引, 因为它处理数据分析和处理, 尤其是处理高维数据时。它还可以在Series和DataFrame等较低维度的数据结构中存储和处理任意数量的维度的数据。它是标准索引对象的层次结构类似物, 用于...多重索引被定义为非常重要的索引, 因为它处理数据分析和处理, 尤其是处理高维数据时。它还可以在Series和DataFrame等较低维度的数据结构中存储和处理任意数量的维度的数据。
它是标准索引对象的层次结构类似物, 用于将轴标签存储在pandas对象中。也可以将其定义为元组数组, 其中每个元组都是唯一的。可以从数组列表, 元组数组和可迭代的交叉集创建。
例:
arrays = [['it', 'it', 'of', 'of', 'for', 'for', 'then', 'then'], ['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two']]
tuples = list(zip(*arrays))
tuples
输出
[('it', 'one'), ('it', 'two'), ('of', 'one'), ('of', 'two'), ('for', 'one'), ('for', 'two'), ('then', 'one'), ('then', 'two')]
范例2:
arrays = [['it', 'it', 'of', 'of', 'for', 'for', 'then', 'then'], ['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two']]
tuples = list(zip(*arrays))
index = pd.MultiIndex.from_tuples(tuples, names=['first', 'second'])
输出
MultiIndex([('bar', 'one'), [('it', 'one'), ('it', 'two'), ('of', 'one'), ('of', 'two'), ('for', 'one'), ('for', 'two'), ('then', 'one'), ('then', 'two')]
names=['first', 'second'])
范例3:
import pandas as pd
import numpy as np
pd.MultiIndex(levels=[[np.nan, None, pd.NaT, 128, 2]], codes=[[0, -1, 1, 2, 3, 4]])
输出
MultiIndex(levels=[[nan, None, NaT, 128, 2]], codes=[[0, -1, 1, 2, 3, 4]])
-
【pandas教程】多重索引
2022-04-29 22:36:46pandas进阶内容,多重索引的创建、修改、使用 -
数据分析——pandas 多重索引
2020-12-31 07:14:51目标:学会多层索引的创建学会多层索引的取值学会多层索引的排序一、多层索引的创建1、给Series创建索引① ⽅式⼀:直接使⽤index参数创建 在使⽤index参数时,index的值是⼀个列表,其中的元素是多个列表,每个列表... -
Python多重索引:IndexSlice的用法
2021-06-17 23:06:59笔者最近学习< Machine Learning for Algorithmic Trading >的时候遇到了如下代码,不太了解其中意思,经过学习领悟些许,写此篇以...经了解,IndexSlice适用于多重索引情况下的切片操作,接下来举例说明,例子参 -
python 返回列表中某个值的索引方法
2020-12-23 14:08:09以上这篇python 返回列表中某个值的索引方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持软件开发网。 您可能感兴趣的文章:python获取元素在数组中索引号的方法Python打印输出数组中... -
Python多重索引切片示例
2020-11-26 09:38:42其中在介绍loc,iloc函数时提到了多重索引。下面主要举例子来说明如何通过多重索引对DataFrame进行切片。注: 在进行多重索引进行操作之前必须对索引进行排序。slice的中文意义为切成片。在Python中slice函数的参数... -
对Pandas MultiIndex(多重索引)详解
2020-12-22 19:38:13创建多重索引In [16]: df = pd.DataFrame(np.random.randn(3, 8), index=['A', 'B', 'C'], columns=index)In [17]: dfOut[17]:first bar baz foo qux \second one two one two one two oneA 0.895717... -
DataFrame多重索引
2019-09-03 23:19:36DataFrame多重索引,分组计算 -
pandas 难以置信的多重索引3——多重索引的使用(史上最全)
2020-10-22 23:22:07分层索引的一个重要特性是...关于如何获取索引本身的值见文章:**pandas 难以置信的多重索引2——获取多重索引的值(史上最全) 假设你首先创建好了一个多重索引,如果还不会创建的同学,看完**pandas 难以置信的多重索 -
pandas进阶用法(一)筛选条件、多重索引、缺失值
2022-02-16 15:07:48再提取每组的第一个值 In [63]: df.sort_values(by="BBB").groupby("AAA", as_index=False).first() Out[63]: AAA BBB 0 1 1 1 2 1 2 3 2 这里需注意,虽然提取的结果是一样的,但两者索引不同 多重索引 很多... -
什么是多重索引结构?-来自《数据结构和算法之美》专栏读者的多次拷问
2019-03-13 07:12:50关注我的微信公众号:小争哥,获取更多、更新的技术、非技术分享。 作者:前Google工程师,5万人订阅《数据结构...我在专栏里面,有讲到,链表经常和散列表在一块使用,还讲到Redis中的有序集合,是通过散列表和跳表... -
pandas设置多重索引的简单学习
2021-02-20 18:41:40将盛有数组的列表转换成多重索引 import pandas as pd arrays = [[1,2,3],[4,5,6]] df1=pd.DataFrame(np.random.randint(0,150,size=(3,5)),index=pd.MultiIndex.from_arrays(arrays)) print(df1) -
JS检索下拉列表框中被选项目的索引号(selectedIndex)
2020-10-15 21:00:48主要介绍了JS检索下拉列表框中被选项目的索引号(selectedIndex),本文通过实例代码图文详解的形式给大家介绍的非常详细,需要的朋友可以参考下 -
pandas.DataFrame 索引
2020-12-20 23:05:53pandas.DataFrame 索引df.loc / df:选择行与列df:选择列df.loc:选择行df.iloc:按整数位置选择行布尔型索引多重索引 df.loc / df:选择行与列 df:选择列 默认一般用于选择列,但也可以选择行 import numpy ... -
numpy多维数组索引
2022-03-25 14:41:07文章目录切片索引一维二维三维四维布尔索引一维 切片索引 python的numpy中的多维数组,有时候需要定位到数组中的某些区域元素的位置。 一维 一维数组很简单,我们可以直接指定索引,或者使用切片索引。 比如: data[0... -
列表渲染与多重列表嵌套渲染
2019-01-11 12:43:38@[TOC]列表渲染与多重列表嵌套渲染 列表渲染 我们用 v-for 循环语句来进行一组数组的列表渲染。v-for 指令需要以 item in list 形式的特殊语法,list 是源数据数组并且 item 是数组元素迭代的别名。接下来就介绍 v-... -
MySQL Order By索引优化方法
2020-09-11 01:13:00在一些情况下,MySQL可以直接使用索引来满足一个 ORDER BY 或 GROUP BY 子句而无需做额外的排序 -
10分钟带你学会Pandas多层级索引
2021-01-13 11:01:11但实际上,当数据高于二维时,我们一般用包含多层级索引的Dataframe进行表示,而不是使用Panel。原因是使用多层级索引展示数据更加直观,操作数据更加灵活,并且可以表示3维,4维乃至任意维度的数据。一,... -
同时索引python列表里的相同值的方法
2021-01-06 00:58:23from collections import Counter print(Counter([1,2,2,2,2,3,3,3,4,4,4,4])) #Counter({2: 4, 4: 4, 3: 3, 1: 1}) -
数据库为何要建立索引的原因说明
2020-09-11 04:29:37数据库索引是为了增加查询速度而对表字段附加的一种标识。见过很多人机械的理解索引的概念,认为增加索引只有好处没有坏处。 -
Python对列表去重的多种方法(四种方法)
2020-12-04 03:44:24无聊统计了下列表去重到底有多少种方法。下面小编给大家总结一下,具体内容详情如下;开发中对数组、列表去重是非常常见的需求,对一个list中的id进行去重,有下面几种方法,前面两种方法不能保证顺序, 后面两种... -
pandas将dataframe的索引转化为列表list数据(convert dataframe index into a list)
2022-01-25 14:13:59pandas将dataframe的索引转换为列表list数据(convert dataframe index intto a list) -
DataFrame多层索引创建
2022-07-05 17:14:49用pandas方法给DataFrame创建多级索引 -
python中多层索引的创建,取值和排序
2021-03-29 16:01:31多层索引的创建 2. 多层索引的取值 3. 多层索引的排序 ```python 1. 多层索引的创建 Series 多层索引的创建 ![在这里插入图片描述]... -
Python编程16:双重列表以及在列表中查找列表
2020-12-11 10:04:26#少儿编程#前面我们已经介绍过列表的增删改、排序等一些常规操作。查找列表数据也是一个相当常见的需求,所以Python通过提供内置的for循环可以非常方便地做到这一点。比如小朋友们之前做过的一个练习,依次列出列表... -
Python数据分析实践:pandas的索引处理new.pdf
2022-06-14 09:43:242022/3/6 4.7 pandas 的索引处理 4.7 pandas的索引处理 In [ ]: # 引入相关模块 import numpy as np # pandas和numpy 常常结合在一起使用,导入numpy库 import pandas as pd # 导入pandas库 print (pd.__version__) ... -
pandas多层索引的创建和取值以及排序
2021-03-01 23:01:40在创建数据的时候加入一个index列表,这个index列表里面是多个索引列表 Series多层索引的创建方法 import pandas as pd s = pd.Series([1,2,3,4,5,6],index=[['张三','张三','李四','李四','王五','王五'], ['期中'...