Event indicator matrix

q.label.indicator_matrix builds a sparse observation-by-event membership matrix. A value of 1 means the observation belongs to the event’s inclusive lifetime.

Rows sum to label concurrency. Columns expose each event path for uniqueness calculations and sequential bootstrap sampling.

import pandas as pd

import qrt as q

observations = pd.date_range("2026-01-01", periods=7, name="datetime")
end_times = pd.Series(
    observations[[3, 5, 6]],
    index=observations[[0, 1, 4]].rename("event_time"),
)
membership = q.label.indicator_matrix(observations, end_times)
membership.sparse.to_dense()
event_time 2026-01-01 2026-01-02 2026-01-05
datetime
2026-01-01 1 0 0
2026-01-02 1 1 0
2026-01-03 1 1 0
2026-01-04 1 1 0
2026-01-05 0 1 1
2026-01-06 0 1 1
2026-01-07 0 0 1
pd.DataFrame({
    "matrix row sum": membership.sum(axis=1),
    "concurrency": q.label.concurrency(observations, end_times),
})
matrix row sum concurrency
datetime
2026-01-01 1 1
2026-01-02 2 2
2026-01-03 2 2
2026-01-04 2 2
2026-01-05 2 2
2026-01-06 2 2
2026-01-07 1 1
Back to top