28 Subsetting Rles
Rles can be subsetted using an integer (or a list of integers) to get the RLE value at one or more points.
from pyrle import Rle
= Rle([3, 2, 1, 1, 1, 1], [0, 1, 2, 1, 0, 1])
r print(r)
## +--------+-----+-----+-----+-----+-----+-----+
## | Runs | 3 | 2 | 1 | 1 | 1 | 1 |
## |--------+-----+-----+-----+-----+-----+-----|
## | Values | 0.0 | 1.0 | 2.0 | 1.0 | 0.0 | 1.0 |
## +--------+-----+-----+-----+-----+-----+-----+
## Rle of length 9 containing 6 elements (avg. length 1.5)
print(r[2], r[3])
## 0.0 1.0
print(r[[3, 5, 7]])
## [1. 2. 0.]
To get the slice of one or more run lengths use a slice or a dataframe with (at least) the columns Start and End.
import pandas as pd
from pyrle import Rle
= Rle([3, 2, 1, 1, 1, 1], [0, 1, 2, 1, 0, 1])
r print(r[5:10])
## +--------+-----+-----+-----+-----+
## | Runs | 1 | 1 | 1 | 1 |
## |--------+-----+-----+-----+-----|
## | Values | 2.0 | 1.0 | 0.0 | 1.0 |
## +--------+-----+-----+-----+-----+
## Rle of length 4 containing 4 elements (avg. length 1.0)
= pd.DataFrame({"Start": [2, 5], "End": [4, 900]})
df print(df.to_csv(index=False, sep="\t"))
## Start End
## 2 4
## 5 900
print(r[df], end="\n")
## Start End ID Run Value
## 0 2 4 0 1 0.0
## 1 2 4 0 1 1.0
## 2 5 900 1 1 2.0
## 3 5 900 1 1 1.0
## 4 5 900 1 1 0.0
## 5 5 900 1 1 1.0