Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

pandas get position of a given index in DataFrame

Tags:

python

pandas

Let's say I have a DataFrame like this:

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

where 5, 18, 125 are the index

I'd like to get the line before (or after) a certain index. For instance, I have index 18 (eg. by doing df[df.A==2].index), and I want to get the line before, and I don't know that this line has 5 as an index.

2 sub-questions:

  • How can I get the position of index 18? Something like df.loc[18].get_position() which would return 1 so I could reach the line before with df.iloc[df.loc[18].get_position()-1]
  • Is there another solution, a bit like options -C, -A or -B with grep ?
like image 958
jrjc Avatar asked Mar 03 '15 17:03

jrjc


People also ask

How do I select specific rows in pandas based on index?

You can select a single row from pandas DataFrame by integer index using df. iloc[n] .


Video Answer


1 Answers

For your first question:

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

or alternatively

base = df.index.get_loc(18)

To get the surrounding ones:

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

I used Indexes and unions to remove duplicates. You may want to keep them, in which case you can use np.concatenate

Be careful with matches on the very first or last rows :)

like image 113
TomAugspurger Avatar answered Sep 29 '22 01:09

TomAugspurger