Last active
June 27, 2019 18:01
-
-
Save gwbischof/139dbe6738a1f227ca400973c9613d6a to your computer and use it in GitHub Desktop.
merge xarrays
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import xarray | |
import string | |
import random | |
from functools import partial | |
def xevents(numcol, numrows): | |
stream_key = 'descriptor' | |
coord_key = 'time' | |
array_keys = ['seq_num', 'time', 'uid'] | |
dataframe_keys = ['data', 'timestamps', 'filled'] | |
coords = range(numrows) | |
xarr = partial(to_xarray, coord_label=coord_key, coords=coords) | |
datakeys = list(string.ascii_lowercase)[0:numcol] | |
xpage = {**{stream_key: random.randint(0,100)}, | |
**{key: xarr(range(numrows), name=key) for key in array_keys}, | |
**{'data': xarray.merge({key: xarr(randlist(numrows), name=key) | |
for key in datakeys}.values())}, | |
**{'timestamps': xarray.merge({key: xarr(randlist(numrows), name=key) | |
for key in datakeys}.values())}, | |
**{'filled': xarray.merge({key: xarr(randlist(numrows), name=key) | |
for key in datakeys}.values())}} | |
return xpage | |
def randlist(length): | |
return [random.randint(0,100) for _ in range(length)] | |
def to_xarray(array, coord_label, coords, name): | |
array = (xarray.DataArray(array, | |
dims=(coord_label,), | |
coords={coord_label: coords}, | |
name=name)) | |
return array | |
event1 = xevents(5,5) | |
event2 = xevents(5,5) | |
events = [event1, event2] | |
def merge_xarray_event_pages(event_pages): | |
merge_keys = ['seq_num', 'time', 'uid', 'data', 'timestamps', 'filled'] | |
merged = {'descriptor': events[0]['descriptor'], | |
**{key: xarray.concat([page[key] for page in events]) for key in merge_keys}} | |
return merged | |
print(merge_xarray_event_pages(events)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment