I have a DataFrame
and am trying to select a row (given a particular index) and the n
rows preceding it.
I've tried something like:
last_10 = self.market_data.iloc[index:-10]
But this appears to give everything from the index
up until the end of the dataframe minus 10 rows.
What I'd like to happen is to return the row specified by index
and the 10 rows preceding it
If general index like DatetimeIndex
use DataFrame.iloc
with Index.get_loc
for position of val
:
print (market_data)
val
Date
1900-01-01 2.0
1900-01-02 3.0
1900-01-03 5.1
1900-01-04 5.0
1900-01-05 6.0
1900-01-06 7.0
1900-01-07 3.0
n = 3
val = '1900-01-04'
pos = market_data.index.get_loc(val)
last_10 = market_data.iloc[pos-n+1:pos+1]
print (last_10)
val
Date
1900-01-02 3.0
1900-01-03 5.1
1900-01-04 5.0
If RangeIndex
- get 3 values before index 4
use DataFrame.loc
:
print (market_data)
Date val
0 1900-01-01 2.0
1 1900-01-02 3.0
2 1900-01-03 5.1
3 1900-01-04 5.0
4 1900-01-05 6.0
5 1900-01-06 7.0
6 1900-01-07 3.0
n = 3
val = 4
last_10 = market_data.loc[val-n+1:val]
print (last_10)
Date val
2 1900-01-03 5.1
3 1900-01-04 5.0
4 1900-01-05 6.0
Use this:
n = 10
last_10 = self.market_data.iloc[index-n:index+1]
When slicing arrays, Python returns everything up until the last index, so you need to add one to include it.
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