def row_select(self, vec): """ Boolean column select lookup :param vec: An H2OVec. :return: A new H2OVec. """ e = Expr("[", self, vec) j = h2o.frame(e.eager()) e.set_len(j['frames'][0]['rows']) return H2OVec(self._name, e)
def __getitem__(self, i): """ Column selection via integer, string(name) Column selection via slice returns a subset of the H2OFrame :param i: An int, str, slice, H2OVec, or list/tuple :return: An H2OVec, an H2OFrame, or scalar depending on the input slice. """ if self._vecs is None or self._vecs == []: raise ValueError("Frame Removed") if isinstance(i, int): return self._vecs[i] if isinstance(i, str): return self._find(i) # Slice; return a Frame not a Vec if isinstance(i, slice): return H2OFrame(vecs=self._vecs[i]) # Row selection from a boolean Vec if isinstance(i, H2OVec): self._len_check(i) return H2OFrame(vecs=[x.row_select(i) for x in self._vecs]) # have a list/tuple of numbers or strings if isinstance(i, list) or (isinstance(i, tuple) and len(i) != 2): vecs = [] for it in i: if isinstance(it, int): vecs.append(self._vecs[it]) elif isinstance(it, str): vecs.append(self._find(it)) else: raise NotImplementedError return H2OFrame(vecs=vecs) # multi-dimensional slicing via 2-tuple if isinstance(i, tuple): veckeys = [str(v._expr._data) for v in self._vecs] left = Expr(veckeys) rite = Expr((i[0], i[1])) res = Expr("[", left, rite, length=2) if not isinstance(i[0], int) or not isinstance(i[1], int): return res # possible big data # small data (single value) res.eager() if res.is_local(): return res._data j = h2o.frame(res._data) # data is remote return map(list, zip(*[c['data'] for c in j['frames'][0]['columns'][:]]))[0][0] raise NotImplementedError("Slicing by unknown type: "+str(type(i)))
def row_select(self, vec): """ Boolean column select lookup :param vec: An H2OVec. :return: A new H2OVec. """ e = Expr("[", self, vec) r = e.eager() if isinstance(r, (float,int)): e.set_len(1) else: j = h2o.frame(r) e.set_len(j['frames'][0]['rows']) return H2OVec(self._name, e)