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:
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]
-C
, -A
or -B
with grep ?You can select a single row from pandas DataFrame by integer index using df. iloc[n] .
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 :)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With