def downsample(self, freq, closed=None, label=None, axis=0, drop_empty=True): """ Essentially use resample logic but reutrning the groupby object """ # default closed/label on offset defaults = _offset_defaults(freq) if closed is None: closed = defaults['closed'] if label is None: label = defaults['label'] tg = TimeGrouper(freq, closed=closed, label=label, axis=axis) grouper = tg.get_grouper(self) # drop empty groups. this is when we have irregular data that # we just want to group into Daily without creating empty days. if drop_empty: bins = [0] # start with 0 for np.diff bins.extend(grouper.bins) bins = np.array(bins) periods_in_bin = np.diff(bins) empty = periods_in_bin == 0 binlabels = grouper.binlabels # skip the 0 we added bins = bins[1:][~empty] binlabels = binlabels[~empty] grouper = BinGrouper(bins, binlabels) return self.groupby(grouper, axis=axis)
def test_panel_aggregation(self): ind = pd.date_range('1/1/2000', periods=100) data = np.random.randn(2, len(ind), 4) wp = pd.Panel(data, items=['Item1', 'Item2'], major_axis=ind, minor_axis=['A', 'B', 'C', 'D']) tg = TimeGrouper('M', axis=1) grouper = tg.get_grouper(wp) bingrouped = wp.groupby(grouper) binagg = bingrouped.mean() def f(x): assert(isinstance(x, Panel)) return x.mean(1) result = bingrouped.agg(f) tm.assert_panel_equal(result, binagg)
def test_panel_aggregation(self): ind = pd.date_range("1/1/2000", periods=100) data = np.random.randn(2, len(ind), 4) wp = pd.Panel(data, items=["Item1", "Item2"], major_axis=ind, minor_axis=["A", "B", "C", "D"]) tg = TimeGrouper("M", axis=1) _, grouper, _ = tg.get_grouper(wp) bingrouped = wp.groupby(grouper) binagg = bingrouped.mean() def f(x): assert isinstance(x, Panel) return x.mean(1) result = bingrouped.agg(f) tm.assert_panel_equal(result, binagg)
def test_apply_iteration(self): # #2300 N = 1000 ind = pd.date_range(start="2000-01-01", freq="D", periods=N) df = DataFrame({"open": 1, "close": 2}, index=ind) tg = TimeGrouper("M") _, grouper, _ = tg.get_grouper(df) # Errors grouped = df.groupby(grouper, group_keys=False) f = lambda df: df["close"] / df["open"] # it works! result = grouped.apply(f) self.assertTrue(result.index.equals(df.index))
def test_panelgroupby(self): def agg_func(pan): assert isinstance(pan, pd.Panel) return pan.mean() ind = pd.date_range('1/1/2000', periods=100) data = np.random.randn(2,len(ind),4) wp = pd.Panel(data, items=['Item1', 'Item2'], major_axis=ind, minor_axis=['A', 'B', 'C', 'D']) from pandas.tseries.resample import TimeGrouper #timegrouper tg = TimeGrouper('M', axis=1) grouper = tg.get_grouper(wp) bingrouped = wp.groupby(grouper) # Failed 12-15-12 # https://github.com/pydata/pandas/issues/2537 bingrouped.agg(agg_func)
def test_apply_iteration(self): # #2300 N = 1000 ind = pd.date_range(start="2000-01-01", freq="D", periods=N) df = DataFrame({'open': 1, 'close': 2}, index=ind) tg = TimeGrouper('M') _, grouper, _ = tg.get_grouper(df) # Errors grouped = df.groupby(grouper, group_keys=False) f = lambda df: df['close'] / df['open'] # it works! result = grouped.apply(f) self.assertTrue(result.index.equals(df.index))
def test_panel_aggregation(self): ind = pd.date_range('1/1/2000', periods=100) data = np.random.randn(2, len(ind), 4) wp = pd.Panel(data, items=['Item1', 'Item2'], major_axis=ind, minor_axis=['A', 'B', 'C', 'D']) tg = TimeGrouper('M', axis=1) grouper = tg.get_grouper(wp) bingrouped = wp.groupby(grouper) binagg = bingrouped.mean() def f(x): assert (isinstance(x, Panel)) return x.mean(1) result = bingrouped.agg(f) tm.assert_panel_equal(result, binagg)
def downsample(self, freq, closed=None, label=None, axis=0): """ Essentially use resample logic but reutrning the groupby object """ # default closed/label on offset defaults = _offset_defaults(freq) if closed is None: closed = defaults['closed'] if label is None: label = defaults['label'] tg = TimeGrouper(freq, closed=closed, label=label, axis=axis) grouper = tg.get_grouper(self) # TODO Get rid of empty bins? #bins = [0] #bins.extend(grouper.bins) #periods_in_bin = np.diff(bins) return self.groupby(grouper, axis=axis)
def downsample(self, freq, closed='right', label='right', axis=0): tg = TimeGrouper(freq, closed=closed, label=label) grouper = tg.get_grouper(self) return self.groupby(grouper, axis=axis)
def downsample(self, freq, closed='right', label='right', axis=0): tg = TimeGrouper(freq, closed=closed, label=label) grouper = tg.get_grouper(self) return self.groupby(grouper, axis=axis)