2015-03-03 6 views
6

Допустим, у меня есть DataFrame вроде этого:панды получить позицию данного индекса в DataFrame

df 
    A B 
5 0 1 
18 2 3 
125 4 5 

где 5, 18, 125 являются индекс

Я хотел бы получить линию до (или после) определенный индекс. Например, у меня есть индекс 18 (например, делая df[df.A==2].index), и я хочу получить строку раньше, и я не знаю, что эта строка имеет 5 в качестве индекса.

2 подвопросы:

  • Как я могу получить позицию индекса 18? Что-то вроде df.loc[18].get_position() который вернется 1, чтобы я мог добраться до линии, прежде чем с df.iloc[df.loc[18].get_position()-1]
  • Есть ли другое решение, немного как варианты -C, -A или -B с Grep?

ответ

10

Для вашего первого вопроса:

base = df.index.get_indexer_for((df[df.A == 2].index)) 

или альтернативно

base = df.index.get_loc(18) 

Чтобы окружающие них:

mask = pd.Index(base).union(pd.Index(base - 1)).union(pd.Index(base + 1)) 

Я использовал индексы и объединения для удаления дубликатов. Возможно, вы захотите их сохранить, и в этом случае вы можете использовать np.concatenate

Будьте осторожны с совпадениями на самых первых или последних строках :)

Смежные вопросы