Constraints that specify single values¶
Say we want to select all passes. We can do it like this:
import numpy as np
import pandas as pd
import xarray as xr
import xarray_events
ds = xr.Dataset(
data_vars={
'ball_trajectory': (
['frame', 'cartesian_coords'],
np.exp(np.linspace((-6, -8), (3, 2), 2450))
)
},
coords={
'frame': np.arange(1, 2451),
'cartesian_coords': ['x', 'y'],
'player_id': [2, 3, 7, 19, 20, 21, 22, 28, 34, 79]
},
attrs={'match_id': 12, 'resolution_fps': 25}
)
events = pd.DataFrame(
{
'event_type':
['pass', 'goal', 'pass', 'pass', 'pass',
'penalty', 'goal', 'pass', 'pass', 'penalty'],
'start_frame': [1, 425, 600, 945, 1100, 1280, 1890, 2020, 2300, 2390],
'end_frame': [424, 599, 944, 1099, 1279, 1889, 2019, 2299, 2389, 2450],
'player_id': [79, 79, 19, 2, 3, 2, 3, 79, 2, 79]
}
)
(
ds
.events.load(events, {'frame': ('start_frame', 'end_frame')})
.events.sel({'event_type': 'pass'})
.events.df
)
| event_type | start_frame | end_frame | player_id | |
|---|---|---|---|---|
| 0 | pass | 1 | 424 | 79 |
| 2 | pass | 600 | 944 | 19 |
| 3 | pass | 945 | 1099 | 2 |
| 4 | pass | 1100 | 1279 | 3 |
| 7 | pass | 2020 | 2299 | 79 |
| 8 | pass | 2300 | 2389 | 2 |
See? We are now using the accessor twice, once every time we need to access any
of its methods. First we access the method sel() and then the property
df(). This is because the result of sel() is actually a (stateful)
Dataset, as mentioned before, so we use the accessor again on it in a
chain-like fashion. Very convenient!