Подтвердить что ты не робот

Получение целочисленного индекса строки Pandas DataFrame, выполняющей условие?

У меня есть следующий DataFrame:

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

Как вы можете видеть, столбец b используется как индекс. Я хочу получить порядковый номер строки, выполняющей ('b' == 5), которая в этом случае будет 1.

Проверяемый столбец может быть либо столбцом индекса (как в случае с b в этом случае), либо регулярным столбцом, например. Я могу найти индекс строки, выполняющей ('c' == 6).

4b9b3361

Ответ 1

Вы можете использовать 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

Используйте 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