Получение целочисленного индекса строки Pandas DataFrame, выполняющей условие?
У меня есть следующий DataFrame:
a b c
b
2 1 2 3
5 4 5 6
Как вы можете видеть, столбец b
используется как индекс. Я хочу получить порядковый номер строки, выполняющей ('b' == 5)
, которая в этом случае будет 1
.
Проверяемый столбец может быть либо столбцом индекса (как в случае с b
в этом случае), либо регулярным столбцом, например. Я могу найти индекс строки, выполняющей ('c' == 6)
.
Ответы
Ответ 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