提问人:user2407991 提问时间:5/22/2013 最后编辑:user2407991 更新时间:10/15/2018 访问量:175810
在PANDAS中,如何获取已知值的索引?
In PANDAS, how to get the index of a known value?
问:
如果我们在一列中有一个已知值,我们如何获取它的索引值?例如:
In [148]: a = pd.DataFrame(np.arange(10).reshape(5,2),columns=['c1','c2'])
In [149]: a
Out[149]:
c1 c2
0 0 1
1 2 3
2 4 5
........
众所周知,我们可以通过与之对应的索引来获取一个值,如下所示。
In [151]: a.ix[0,1] In [152]: a.c2[0] In [154]: a.c2.ix[0] <-- use index
Out[151]: 1 Out[152]: 1 Out[154]: 1 <-- get value
但是如何按值获取指数呢?
答:
52赞
waitingkuo
5/22/2013
#1
您的值可能有多个索引映射,返回一个列表更有意义:
In [48]: a
Out[48]:
c1 c2
0 0 1
1 2 3
2 4 5
3 6 7
4 8 9
In [49]: a.c1[a.c1 == 8].index.tolist()
Out[49]: [4]
评论
0赞
Andy Hayden
5/22/2013
索引可以有非唯一条目,为什么说返回列表更有意义?
3赞
waitingkuo
5/22/2013
嗯,我认为这是我的错。如果所有指数都是唯一的,我们可以得到单个指数a.c1[a.c1 == 8].index.tolist()[0]
0赞
user2407991
5/23/2013
谢谢你的回答,这是一个很好的理想。我还没有考虑过索引对象可以转换为普通列表.thanks agagin。
0赞
7/30/2017
他们在2017年发布的@waitingkuo复杂的方式来获得指数?
0赞
Shervin Rad
6/5/2020
@waitingkuo如果我们想插入两个条件,我们该怎么做呢?像 a.c1[a.c1 == 8 <和 a.c2==10>]。不适用于此示例,但想象一下,如果 A.C2 == 10 也存在
8赞
Surya
12/31/2016
#2
反之亦然地使用 numpy.where() :
import numpy as np
import pandas as pd
In [800]: df = pd.DataFrame(np.arange(10).reshape(5,2),columns=['c1','c2'])
In [801]: df
Out[801]:
c1 c2
0 0 1
1 2 3
2 4 5
3 6 7
4 8 9
In [802]: np.where(df["c1"]==6)
Out[802]: (array([3]),)
In [803]: indices = list(np.where(df["c1"]==6)[0])
In [804]: df.iloc[indices]
Out[804]:
c1 c2
3 6 7
In [805]: df.iloc[indices].index
Out[805]: Int64Index([3], dtype='int64')
In [806]: df.iloc[indices].index.tolist()
Out[806]: [3]
37赞
gxpr
8/1/2017
#3
使用 .loc[] 访问器:
In [25]: a.loc[a['c1'] == 8].index[0]
Out[25]: 4
也可以通过设置“c1”作为索引来使用 get_loc()。这不会更改原始数据帧。
In [17]: a.set_index('c1').index.get_loc(8)
Out[17]: 4
7赞
RumbleFish
12/11/2017
#4
若要按值获取索引,只需将 .index[0] 添加到查询末尾即可。这将返回结果第一行的索引...
因此,应用于您的数据帧:
In [1]: a[a['c2'] == 1].index[0] In [2]: a[a['c1'] > 7].index[0]
Out[1]: 0 Out[2]: 4
如果查询返回多行,则可以通过指定所需的索引(例如 .index[n])来访问其他索引结果
In [3]: a[a['c2'] >= 7].index[1] In [4]: a[(a['c2'] > 1) & (a['c1'] < 8)].index[2]
Out[3]: 4 Out[4]: 3
2赞
Jay
10/15/2018
#5
我认为这可能会对您有所帮助,包括值的索引和列。
您要查找的值不会重复:
poz=matrix[matrix==minv].dropna(axis=1,how='all').dropna(how='all')
value=poz.iloc[0,0]
index=poz.index.item()
column=poz.columns.item()
您可以获取其索引和列
重复:
matrix=pd.DataFrame([[1,1],[1,np.NAN]],index=['q','g'],columns=['f','h'])
matrix
Out[83]:
f h
q 1 1.0
g 1 NaN
poz=matrix[matrix==minv].dropna(axis=1,how='all').dropna(how='all')
index=poz.stack().index.tolist()
index
Out[87]: [('q', 'f'), ('q', 'h'), ('g', 'f')]
你会得到一个清单
评论