获取满足条件的Pandas DataFrame行的整数索引?

时间:2013-08-13 01:31:08

标签: python numpy pandas

我有以下DataFrame:

   a  b  c
b
2  1  2  3
5  4  5  6

如您所见,列b用作索引。我想获得满足('b' == 5)的行的序号,在这种情况下为1

正在测试的列可以是索引列(在本例中与b一样)或常规列,例如我可能想要找到满足('c' == 6)的行的索引。

3 个答案:

答案 0 :(得分:31)

改为使用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'))
>>> df
   a  b  c
b
2  1  2  3
5  4  5  6
>>> df.index.get_loc(5)
1

答案 1 :(得分:30)

您可以像这样使用np.where

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
# b         
# 2  1  2  3
# 5  4  5  6
print(np.where(df.index==5)[0])
# [1]
print(np.where(df['c']==6)[0])
# [1]

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

答案 2 :(得分:2)

具有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'))
>>> df
   a  b  c
b
2  1  2  3
5  4  5  6
>>> df.index.get_loc(df.index[df['b'] == 5][0])
1