Skip to content

compare

laktory.polars.expressions.compare ยค

compare(x, y=0, where=None, operator='==', default=None)

Compare a column x and a value or another column y using operator. Comparison can be limited to where and assigned default elsewhere.

output = x operator y

PARAMETER DESCRIPTION
x

Base column to compare

TYPE: Expr

y

Column to compare to

TYPE: Union[Expr, float, str, bool] DEFAULT: 0

where

Where to apply the comparison

TYPE: Expr DEFAULT: None

operator

Operator for comparison

TYPE: str DEFAULT: '=='

default

Default value to be applied when where is False

TYPE: Union[Expr, float, str, bool] DEFAULT: None

RETURNS DESCRIPTION
Expr

Comparison result

Examples:

import laktory  # noqa: F401
import polars as pl

df = pl.DataFrame({"x": [0.45, 0.55]})
df = df.with_columns(
    y=pl.expr.laktory.compare(
        pl.col("x"),
        pl.lit(0.5),
        operator=">",
    )
)
print(df.glimpse(return_as_string=True))
'''
Rows: 2
Columns: 2
$ x  <f64> 0.45, 0.55
$ y <bool> False, True
'''
Source code in laktory/polars/expressions/logical.py
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
def compare(
    x: pl.Expr,
    y: Union[pl.Expr, float, str, bool] = 0,
    where: pl.Expr = None,
    operator: str = "==",
    default: Union[pl.Expr, float, str, bool] = None,
) -> pl.Expr:
    """
    Compare a column `x` and a value or another column `y` using
    `operator`. Comparison can be limited to `where` and assigned
    `default` elsewhere.

    output = `x` `operator` `y`

    Parameters
    ---------
    x :
        Base column to compare
    y :
        Column to compare to
    where:
        Where to apply the comparison
    operator: str
        Operator for comparison
    default:
        Default value to be applied when `where` is `False`

    Returns
    -------
    :
        Comparison result

    Examples
    --------
    ```py
    import laktory  # noqa: F401
    import polars as pl

    df = pl.DataFrame({"x": [0.45, 0.55]})
    df = df.with_columns(
        y=pl.expr.laktory.compare(
            pl.col("x"),
            pl.lit(0.5),
            operator=">",
        )
    )
    print(df.glimpse(return_as_string=True))
    '''
    Rows: 2
    Columns: 2
    $ x  <f64> 0.45, 0.55
    $ y <bool> False, True
    '''
    ```
    """
    if operator == "==":
        c = x == y
    elif operator == "!=":
        c = x != y
    elif operator == "<":
        c = x < y
    elif operator == "<=":
        c = x <= y
    elif operator == ">":
        c = x > y
    elif operator == ">=":
        c = x >= y
    else:
        raise ValueError(f"Operator '{operator}' is not supported.")

    if where is not None:
        if default is None:
            default = pl.lit(None)

        c = pl.when(where).then(c).otherwise(default)

    return c