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()
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()
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)
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()
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()
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()