Skip to content

Instantly share code, notes, and snippets.

@gwbischof
Last active June 27, 2019 18:01
Show Gist options
  • Save gwbischof/139dbe6738a1f227ca400973c9613d6a to your computer and use it in GitHub Desktop.
Save gwbischof/139dbe6738a1f227ca400973c9613d6a to your computer and use it in GitHub Desktop.
merge xarrays
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