def union(self, other): """ Form the union of two MultiIndex objects, sorting if possible Parameters ---------- other : MultiIndex or array / Index of tuples Returns ------- Index """ self._assert_can_do_setop(other) if len(other) == 0 or self.equals(other): return self result_names = self.names if self.names == other.names else None self_tuples = self.get_tuple_index() other_tuples = other.get_tuple_index() uniq_tuples = lib.fast_unique_multiple([self_tuples, other_tuples]) return MultiIndex.from_arrays(zip(*uniq_tuples), sortorder=0, names=result_names)
def _union_block_items(blocks): tot_len = 0 all_items = [] slow = False for b in blocks: tot_len += len(b.items) if type(b.items) != Index: slow = True all_items.append(b.items) if slow: the_union = _union_items_slow(all_items) else: the_union = Index(lib.fast_unique_multiple(all_items)) if tot_len > len(the_union): raise Exception('item names overlap') return the_union
def union(self, other): """ Form the union of two Index objects and sorts if possible Parameters ---------- other : Index or array-like Returns ------- union : Index """ if not hasattr(other, '__iter__'): raise Exception('Input must be iterable!') if len(other) == 0 or self.equals(other): return self if len(self) == 0: return _ensure_index(other) return Index(_tseries.fast_unique_multiple([self, other]))
def union(self, other): """ Form the union of two MultiIndex objects, sorting if possible Parameters ---------- other : MultiIndex or array / Index of tuples Returns ------- Index """ self._assert_can_do_setop(other) if len(other) == 0 or self.equals(other): return self result_names = self.names if self.names == other.names else None uniq_tuples = lib.fast_unique_multiple([self.values, other.values]) return MultiIndex.from_arrays(zip(*uniq_tuples), sortorder=0, names=result_names)
def union(self, other): """ Form the union of two MultiIndex objects, sorting if possible Parameters ---------- other : MultiIndex or array / Index of tuples Returns ------- Index """ self._assert_can_do_setop(other) if len(other) == 0 or self.equals(other): return self # TODO: optimize / make less wasteful self_tuples = self.get_tuple_index() other_tuples = other.get_tuple_index() uniq_tuples = _tseries.fast_unique_multiple([self_tuples, other_tuples]) return MultiIndex.from_arrays(zip(*uniq_tuples), sortorder=0)