Exemplo n.º 1
0
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)
Exemplo n.º 2
0
    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)
Exemplo n.º 3
0
    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)
Exemplo n.º 4
0
    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))
Exemplo n.º 5
0
    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)
Exemplo n.º 6
0
    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))
Exemplo n.º 7
0
    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)
Exemplo n.º 8
0
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)
Exemplo n.º 9
0
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)
Exemplo n.º 10
0
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)