正如你所看到的,列 b 被用作索引。我想得到满足 ('b' == 5) 的行的序号,在这种情况下,就是 1

被测试的列可以是一个索引列(如本例中的 b ),也可以是一个普通的列,例如,我可能想找到满足 ('c' == 6) 的行的索引。

python
numpy
pandas
Dun Peal
Dun Peal
发布于 2013-08-13
3 个回答
hlin117
hlin117
发布于 2018-10-23
已采纳
0 人赞同

Use Index.get_loc 而不是。

重复使用@unutbu的设置代码,你会得到同样的结果。

>>> import pandas as pd
>>> import numpy as np
>>> df = pd.DataFrame(np.arange(1,7).reshape(2,3),
                  columns = list('abc'),
                  index=pd.Series([2,5], name='b'))
   a  b  c
2  1  2  3
5  4  5  6
>>> df.index.get_loc(5)
    
这不是OP想要的。你回答的问题是:"给定索引的序号位置是什么?"。OP想知道,"满足给定条件的一行的序号位置是什么?"。也就是说,输入的是某个条件,例如(df.b == 5)或者(df.c == 6)。
Pete
OP说:"被测试的列可以是一个索引列(如本例中的b),也可以是一个普通的列,例如,我可能想找到满足的行的索引('c' == 6)"
unutbu
unutbu
发布于 2018-10-23
0 人赞同

You could use np.where like this:

import pandas as pd
import numpy as np
df = pd.DataFrame(np.arange(1,7).reshape(2,3),
                  columns = list('abc'), 
                  index=pd.Series([2,5], name='b'))
print(df)
#    a  b  c
# 2  1  2  3
# 5  4  5  6
print(np.where(df.index==5)[0])
# [1]
print(np.where(df['c']==6)[0])
# [1]

返回的值是一个数组,因为在一列中可能有不止一个具有特定索引或值的行。

pandas没有做 np.where(df.index == 5)[0] ,而是有一个 get_loc 的函数,这似乎更合适。 pandas.pydata.org/pandas-docs/stable/generated/...
@hlin117 - 你的评论应该是正确的答案,请补充。
看起来比熊猫的方法更整洁,更容易理解。
Gabriele Picco
Gabriele Picco
发布于 2018-10-23
0 人赞同

With Index.get_loc 和一般状况。

>>> import pandas as pd
>>> import numpy as np
>>> df = pd.DataFrame(np.arange(1,7).reshape(2,3),
                  columns = list('abc'),
                  index=pd.Series([2,5], name='b'))
   a  b  c