示例#1
0
    def get_new_columns(self):
        if self.value_columns is None:
            if self.lift == 0:
                return self.removed_level

            lev = self.removed_level
            return lev.insert(0, _get_na_value(lev.dtype.type))

        stride = len(self.removed_level) + self.lift
        width = len(self.value_columns)
        propagator = np.repeat(np.arange(width), stride)
        if isinstance(self.value_columns, MultiIndex):
            new_levels = self.value_columns.levels + (self.removed_level, )
            new_names = self.value_columns.names + (self.removed_name, )

            new_labels = [
                lab.take(propagator) for lab in self.value_columns.labels
            ]
        else:
            new_levels = [self.value_columns, self.removed_level]
            new_names = [self.value_columns.name, self.removed_name]
            new_labels = [propagator]

        new_labels.append(np.tile(np.arange(stride) - self.lift, width))
        return MultiIndex(levels=new_levels,
                          labels=new_labels,
                          names=new_names,
                          verify_integrity=False)
示例#2
0
    def get_new_columns(self):
        if self.value_columns is None:
            if self.lift == 0:
                return self.removed_level

            lev = self.removed_level
            return lev.insert(0, _get_na_value(lev.dtype.type))

        stride = len(self.removed_level) + self.lift
        width = len(self.value_columns)
        propagator = np.repeat(np.arange(width), stride)
        if isinstance(self.value_columns, MultiIndex):
            new_levels = self.value_columns.levels + (self.removed_level,)
            new_names = self.value_columns.names + (self.removed_name,)

            new_labels = [lab.take(propagator)
                          for lab in self.value_columns.labels]
        else:
            new_levels = [self.value_columns, self.removed_level]
            new_names = [self.value_columns.name, self.removed_name]
            new_labels = [propagator]

        new_labels.append(np.tile(np.arange(stride) - self.lift, width))
        return MultiIndex(levels=new_levels, labels=new_labels,
                          names=new_names, verify_integrity=False)
示例#3
0
文件: reshape.py 项目: aechase/pandas
    def get_new_index(self):
        result_labels = [lab.take(self.compressor) for lab in self.sorted_labels[:-1]]

        # construct the new index
        if len(self.new_index_levels) == 1:
            lev, lab = self.new_index_levels[0], result_labels[0]
            if (lab == -1).any():
                lev = lev.insert(len(lev), _get_na_value(lev.dtype.type))
            return lev.take(lab)

        return MultiIndex(
            levels=self.new_index_levels, labels=result_labels, names=self.new_index_names, verify_integrity=False
        )
示例#4
0
    def get_new_index(self):
        result_labels = [lab.take(self.compressor)
                         for lab in self.sorted_labels[:-1]]

        # construct the new index
        if len(self.new_index_levels) == 1:
            lev, lab = self.new_index_levels[0], result_labels[0]
            if (lab == -1).any():
                lev = lev.insert(len(lev), _get_na_value(lev.dtype.type))
            return lev.take(lab)

        return MultiIndex(levels=self.new_index_levels, labels=result_labels,
                          names=self.new_index_names, verify_integrity=False)
示例#5
0
文件: reshape.py 项目: seatme/pandas
def _make_new_index(lev, lab):
    from pandas.core.index import Index, _get_na_value

    nan = _get_na_value(lev.dtype.type)
    vals = lev.values.astype('object')
    vals = np.insert(vals, 0, nan) if lab is None else \
           np.insert(vals, len(vals), nan).take(lab)

    try:
        vals = vals.astype(lev.dtype, subok=False, copy=False)
    except ValueError:
        return Index(vals, **lev._get_attributes_dict())

    return lev._shallow_copy(vals)
示例#6
0
def _make_new_index(lev, lab):
    from pandas.core.index import Index, _get_na_value

    nan = _get_na_value(lev.dtype.type)
    vals = lev.values.astype('object')
    vals = np.insert(vals, 0, nan) if lab is None else \
           np.insert(vals, len(vals), nan).take(lab)

    try:
        vals = vals.astype(lev.dtype, subok=False, copy=False)
    except ValueError:
        return Index(vals, **lev._get_attributes_dict())

    return lev._shallow_copy(vals)
示例#7
0
def _make_index_array_level(lev, lab):
    """ create the combined index array, preserving nans, return an array """
    mask = lab == -1
    if not mask.any():
        return lev

    l = np.arange(len(lab))
    mask_labels = np.empty(len(mask[mask]), dtype=object)
    mask_labels.fill(_get_na_value(lev.dtype.type))
    mask_indexer = com._ensure_int64(l[mask])

    labels = lev
    labels_indexer = com._ensure_int64(l[~mask])

    new_labels = np.empty(tuple([len(lab)]), dtype=object)
    new_labels[labels_indexer] = labels
    new_labels[mask_indexer] = mask_labels

    return new_labels
示例#8
0
def _make_index_array_level(lev, lab):
    """ create the combined index array, preserving nans, return an array """
    mask = lab == -1
    if not mask.any():
        return lev

    l = np.arange(len(lab))
    mask_labels = np.empty(len(mask[mask]), dtype=object)
    mask_labels.fill(_get_na_value(lev.dtype.type))
    mask_indexer = com._ensure_int64(l[mask])

    labels = lev
    labels_indexer = com._ensure_int64(l[~mask])

    new_labels = np.empty(tuple([len(lab)]), dtype=object)
    new_labels[labels_indexer] = labels
    new_labels[mask_indexer] = mask_labels

    return new_labels
示例#9
0
文件: reshape.py 项目: tammyd8/pandas
    def get_new_columns(self):
        if self.value_columns is None:
            if self.lift == 0:
                return self.removed_level

            lev = self.removed_level
            return lev.insert(0, _get_na_value(lev.dtype.type))

        stride = len(self.removed_level) + self.lift
        width = len(self.value_columns)
        propagator = np.repeat(np.arange(width), stride)
        if isinstance(self.value_columns, MultiIndex):
            new_levels = self.value_columns.levels + (
                self.removed_level_full, )
            new_names = self.value_columns.names + (self.removed_name, )

            new_labels = [
                lab.take(propagator) for lab in self.value_columns.labels
            ]
        else:
            new_levels = [self.value_columns, self.removed_level_full]
            new_names = [self.value_columns.name, self.removed_name]
            new_labels = [propagator]

        # The two indices differ only if the unstacked level had unused items:
        if len(self.removed_level_full) != len(self.removed_level):
            # In this case, we remap the new labels to the original level:
            repeater = self.removed_level_full.get_indexer(self.removed_level)
            if self.lift:
                repeater = np.insert(repeater, 0, -1)
        else:
            # Otherwise, we just use each level item exactly once:
            repeater = np.arange(stride) - self.lift

        # The entire level is then just a repetition of the single chunk:
        new_labels.append(np.tile(repeater, width))
        return MultiIndex(levels=new_levels,
                          labels=new_labels,
                          names=new_names,
                          verify_integrity=False)
示例#10
0
    def get_new_columns(self):
        if self.value_columns is None:
            if self.lift == 0:
                return self.removed_level

            lev = self.removed_level
            return lev.insert(0, _get_na_value(lev.dtype.type))

        stride = len(self.removed_level) + self.lift
        width = len(self.value_columns)
        propagator = np.repeat(np.arange(width), stride)
        if isinstance(self.value_columns, MultiIndex):
            new_levels = self.value_columns.levels + (self.removed_level_full,)
            new_names = self.value_columns.names + (self.removed_name,)

            new_labels = [lab.take(propagator)
                          for lab in self.value_columns.labels]
        else:
            new_levels = [self.value_columns, self.removed_level_full]
            new_names = [self.value_columns.name, self.removed_name]
            new_labels = [propagator]

        # The two indices differ only if the unstacked level had unused items:
        if len(self.removed_level_full) != len(self.removed_level):
            # In this case, we remap the new labels to the original level:
            repeater = self.removed_level_full.get_indexer(self.removed_level)
            if self.lift:
                repeater = np.insert(repeater, 0, -1)
        else:
            # Otherwise, we just use each level item exactly once:
            repeater = np.arange(stride) - self.lift

        # The entire level is then just a repetition of the single chunk:
        new_labels.append(np.tile(repeater, width))
        return MultiIndex(levels=new_levels, labels=new_labels,
                          names=new_names, verify_integrity=False)