def block2d_to_blocknd(values, items, shape, labels, ref_items=None): """ pivot to the labels shape """ from pandas.core.internals import make_block panel_shape = (len(items), ) + shape # TODO: lexsort depth needs to be 2!! # Create observation selection vector using major and minor # labels, for converting to panel format. selector = factor_indexer(shape[1:], labels) mask = np.zeros(np.prod(shape), dtype=bool) mask.put(selector, True) pvalues = np.empty(panel_shape, dtype=values.dtype) if not issubclass(pvalues.dtype.type, (np.integer, np.bool_)): pvalues.fill(np.nan) elif not mask.all(): pvalues = com._maybe_upcast(pvalues) pvalues.fill(np.nan) values = values for i in xrange(len(items)): pvalues[i].flat[mask] = values[:, i] if ref_items is None: ref_items = items return make_block(pvalues, items, ref_items)
def block2d_to_blocknd(values, items, shape, labels, ref_items=None): """ pivot to the labels shape """ from pandas.core.internals import make_block panel_shape = (len(items),) + shape # TODO: lexsort depth needs to be 2!! # Create observation selection vector using major and minor # labels, for converting to panel format. selector = factor_indexer(shape[1:], labels) mask = np.zeros(np.prod(shape), dtype=bool) mask.put(selector, True) pvalues = np.empty(panel_shape, dtype=values.dtype) if not issubclass(pvalues.dtype.type, (np.integer, np.bool_)): pvalues.fill(np.nan) elif not mask.all(): pvalues = com._maybe_upcast(pvalues) pvalues.fill(np.nan) values = values for i in xrange(len(items)): pvalues[i].flat[mask] = values[:, i] if ref_items is None: ref_items = items return make_block(pvalues, items, ref_items)
def block2d_to_block3d(values, items, shape, major_labels, minor_labels, ref_items=None): """ Developer method for pivoting DataFrame -> Panel. Used in HDFStore and DataFrame.to_panel """ from pandas.core.internals import make_block panel_shape = (len(items),) + shape # TODO: lexsort depth needs to be 2!! # Create observation selection vector using major and minor # labels, for converting to panel format. selector = minor_labels + shape[1] * major_labels mask = np.zeros(np.prod(shape), dtype=bool) mask.put(selector, True) pvalues = np.empty(panel_shape, dtype=values.dtype) if not issubclass(pvalues.dtype.type, (np.integer, np.bool_)): pvalues.fill(np.nan) elif not mask.all(): pvalues = com._maybe_upcast(pvalues) pvalues.fill(np.nan) values = values for i in xrange(len(items)): pvalues[i].flat[mask] = values[:, i] if ref_items is None: ref_items = items return make_block(pvalues, items, ref_items)
def get_new_values(self): values = self.values # place the values length, width = self.full_shape stride = values.shape[1] result_width = width * stride new_values = np.empty((length, result_width), dtype=values.dtype) new_mask = np.zeros((length, result_width), dtype=bool) new_values = com._maybe_upcast(new_values) new_values.fill(np.nan) # is there a simpler / faster way of doing this? for i in xrange(values.shape[1]): chunk = new_values[:, i * width:(i + 1) * width] mask_chunk = new_mask[:, i * width:(i + 1) * width] chunk.flat[self.mask] = self.sorted_values[:, i] mask_chunk.flat[self.mask] = True new_values = new_values.take(self.unique_groups, axis=0) new_mask = new_mask.take(self.unique_groups, axis=0) return new_values, new_mask
def get_new_values(self): values = self.values # place the values length, width = self.full_shape stride = values.shape[1] result_width = width * stride new_values = np.empty((length, result_width), dtype=values.dtype) new_mask = np.zeros((length, result_width), dtype=bool) new_values = com._maybe_upcast(new_values) new_values.fill(np.nan) # is there a simpler / faster way of doing this? for i in xrange(values.shape[1]): chunk = new_values[:, i * width : (i + 1) * width] mask_chunk = new_mask[:, i * width : (i + 1) * width] chunk.flat[self.mask] = self.sorted_values[:, i] mask_chunk.flat[self.mask] = True new_values = new_values.take(self.unique_groups, axis=0) new_mask = new_mask.take(self.unique_groups, axis=0) return new_values, new_mask