Beispiel #1
0
    def __init__(
        self,
        group_by=None,
        order_by=None,
        preceding=None,
        following=None,
        how='rows',
    ):
        if group_by is None:
            group_by = []

        if order_by is None:
            order_by = []

        self._group_by = util.promote_list(group_by)

        self._order_by = []
        for x in util.promote_list(order_by):
            if isinstance(x, ir.SortExpr):
                pass
            elif isinstance(x, ir.Expr):
                x = ops.SortKey(x).to_expr()
            self._order_by.append(x)

        self.preceding = _list_to_tuple(preceding)
        self.following = _list_to_tuple(following)
        self.how = how

        self._validate_frame()
Beispiel #2
0
    def __init__(self, group_by=None, order_by=None,
                 preceding=None, following=None):
        if group_by is None:
            group_by = []

        if order_by is None:
            order_by = []

        self._group_by = util.promote_list(group_by)
        self._order_by = util.promote_list(order_by)
        self._order_by = [ops.SortKey(expr)
                          if isinstance(expr, ir.Expr)
                          else expr
                          for expr in self._order_by]

        self.preceding = _list_to_tuple(preceding)
        self.following = _list_to_tuple(following)

        self._validate_frame()
Beispiel #3
0
def desc(expr):
    """
    Create a sort key (when used in sort_by) by the passed array expression or
    column name.

    Parameters
    ----------
    expr : array expression or string
      Can be a column name in the table being sorted

    Examples
    --------
    result = (self.table.group_by('g')
              .size('count')
              .sort_by(ibis.desc('count')))
    """
    if not isinstance(expr, Expr):
        return _ops.DeferredSortKey(expr, ascending=False)
    else:
        return _ops.SortKey(expr, ascending=False)
Beispiel #4
0
    def __init__(
        self,
        group_by=None,
        order_by=None,
        preceding=None,
        following=None,
        max_lookback=None,
        how='rows',
    ):
        import ibis.expr.operations as ops

        self._group_by = tuple(
            toolz.unique(
                promote_list([] if group_by is None else group_by),
                key=lambda value: getattr(value, "_key", value),
            ))

        _order_by = []
        for expr in promote_list([] if order_by is None else order_by):
            if isinstance(expr, ir.Expr) and not isinstance(expr, ir.SortExpr):
                expr = ops.SortKey(expr).to_expr()
            _order_by.append(expr)

        self._order_by = tuple(
            toolz.unique(_order_by,
                         key=lambda value: getattr(value, "_key", value)))

        if isinstance(preceding, RowsWithMaxLookback):
            # the offset interval is used as the 'preceding' value of a window
            # while 'rows' is used to adjust the window created using offset
            self.preceding = preceding.max_lookback
            self.max_lookback = preceding.rows
        else:
            self.preceding = _sequence_to_tuple(preceding)
            self.max_lookback = max_lookback

        self.following = _sequence_to_tuple(following)
        self.how = how

        self._validate_frame()
Beispiel #5
0
    def __init__(
        self,
        group_by=None,
        order_by=None,
        preceding=None,
        following=None,
        max_lookback=None,
        how='rows',
    ):
        import ibis.expr.operations as ops

        if group_by is None:
            group_by = []

        if order_by is None:
            order_by = []

        self._group_by = util.promote_list(group_by)

        self._order_by = []
        for x in util.promote_list(order_by):
            if isinstance(x, ir.SortExpr):
                pass
            elif isinstance(x, ir.Expr):
                x = ops.SortKey(x).to_expr()
            self._order_by.append(x)

        if isinstance(preceding, RowsWithMaxLookback):
            # the offset interval is used as the 'preceding' value of a window
            # while 'rows' is used to adjust the window created using offset
            self.preceding = preceding.max_lookback
            self.max_lookback = preceding.rows
        else:
            self.preceding = _sequence_to_tuple(preceding)
            self.max_lookback = max_lookback

        self.following = _sequence_to_tuple(following)
        self.how = how

        self._validate_frame()
Beispiel #6
0
def asc(expr: ir.ColumnExpr | str) -> ir.SortExpr | ops.DeferredSortKey:
    """Create a ascending sort key from `asc` or column name.

    Parameters
    ----------
    expr
        The expression or column name to use for sorting

    Examples
    --------
    >>> import ibis
    >>> t = ibis.table([('g', 'string')])
    >>> result = t.group_by('g').size('count').sort_by(ibis.asc('count'))

    Returns
    -------
    ops.DeferredSortKey
        A deferred sort key
    """
    if not isinstance(expr, Expr):
        return ops.DeferredSortKey(expr)
    else:
        return ops.SortKey(expr).to_expr()