pub enum Expr {
Show 30 variants
Alias(Box<Expr, Global>, Arc<str>),
Column(Arc<str>),
Columns(Vec<String, Global>),
DtypeColumn(Vec<DataType, Global>),
Literal(LiteralValue),
BinaryExpr {
left: Box<Expr, Global>,
op: Operator,
right: Box<Expr, Global>,
},
Not(Box<Expr, Global>),
IsNotNull(Box<Expr, Global>),
IsNull(Box<Expr, Global>),
Cast {
expr: Box<Expr, Global>,
data_type: DataType,
strict: bool,
},
Sort {
expr: Box<Expr, Global>,
options: SortOptions,
},
Take {
expr: Box<Expr, Global>,
idx: Box<Expr, Global>,
},
SortBy {
expr: Box<Expr, Global>,
by: Vec<Expr, Global>,
reverse: Vec<bool, Global>,
},
Agg(AggExpr),
Ternary {
predicate: Box<Expr, Global>,
truthy: Box<Expr, Global>,
falsy: Box<Expr, Global>,
},
Function {
input: Vec<Expr, Global>,
function: NoEq<Arc<dyn SeriesUdf + 'static>>,
output_type: NoEq<Arc<dyn FunctionOutputField + 'static>>,
options: FunctionOptions,
},
Shift {
input: Box<Expr, Global>,
periods: i64,
},
Reverse(Box<Expr, Global>),
Duplicated(Box<Expr, Global>),
IsUnique(Box<Expr, Global>),
Explode(Box<Expr, Global>),
Filter {
input: Box<Expr, Global>,
by: Box<Expr, Global>,
},
Window {
function: Box<Expr, Global>,
partition_by: Vec<Expr, Global>,
order_by: Option<Box<Expr, Global>>,
options: WindowOptions,
},
Wildcard,
Slice {
input: Box<Expr, Global>,
offset: Box<Expr, Global>,
length: Box<Expr, Global>,
},
Exclude(Box<Expr, Global>, Vec<Excluded, Global>),
KeepName(Box<Expr, Global>),
RenameAlias {
function: NoEq<Arc<dyn RenameAliasFn + 'static>>,
expr: Box<Expr, Global>,
},
Count,
Nth(i64),
}
Expand description
Queries consists of multiple expressions.
Variants
Alias(Box<Expr, Global>, Arc<str>)
Column(Arc<str>)
Columns(Vec<String, Global>)
DtypeColumn(Vec<DataType, Global>)
Literal(LiteralValue)
BinaryExpr
Not(Box<Expr, Global>)
IsNotNull(Box<Expr, Global>)
IsNull(Box<Expr, Global>)
Cast
Sort
Take
SortBy
Agg(AggExpr)
Ternary
A ternary operation if true then “foo” else “bar”
Function
Fields
output_type: NoEq<Arc<dyn FunctionOutputField + 'static>>
output dtype of the function
options: FunctionOptions
Shift
Reverse(Box<Expr, Global>)
Duplicated(Box<Expr, Global>)
IsUnique(Box<Expr, Global>)
Explode(Box<Expr, Global>)
Filter
Window
Fields
options: WindowOptions
See postgres window functions
Wildcard
Slice
Fields
Exclude(Box<Expr, Global>, Vec<Excluded, Global>)
Can be used in a select statement to exclude a column from selection
KeepName(Box<Expr, Global>)
Set root name as Alias
RenameAlias
Count
Special case that does not need columns
Nth(i64)
Take the nth column in the DataFrame
Implementations
sourceimpl Expr
impl Expr
sourcepub fn is_not_null(self) -> Expr
pub fn is_not_null(self) -> Expr
Run is_not_null operation on Expr
.
sourcepub fn drop_nulls(self) -> Expr
pub fn drop_nulls(self) -> Expr
Drop null values
sourcepub fn quantile(self, quantile: f64, interpol: QuantileInterpolOptions) -> Expr
pub fn quantile(self, quantile: f64, interpol: QuantileInterpolOptions) -> Expr
Compute the quantile per group.
sourcepub fn agg_groups(self) -> Expr
pub fn agg_groups(self) -> Expr
Get the group indexes of the group by operation.
sourcepub fn slice(self, offset: Expr, length: Expr) -> Expr
pub fn slice(self, offset: Expr, length: Expr) -> Expr
Slice the Series.
offset
may be negative.
sourcepub fn unique_stable(self) -> Expr
pub fn unique_stable(self) -> Expr
Get unique values of this expression, while maintaining order.
This requires more work than Expr::unique
.
sourcepub fn arg_unique(self) -> Expr
pub fn arg_unique(self) -> Expr
Get the first index of unique values of this expression.
sourcepub fn arg_sort(self, reverse: bool) -> Expr
pub fn arg_sort(self, reverse: bool) -> Expr
Get the index values that would sort this expression.
sourcepub fn strict_cast(self, data_type: DataType) -> Expr
pub fn strict_cast(self, data_type: DataType) -> Expr
Cast expression to another data type. Throws an error if conversion had overflows
sourcepub fn sort(self, reverse: bool) -> Expr
pub fn sort(self, reverse: bool) -> Expr
Sort in increasing order. See the eager implementation.
sourcepub fn sort_with(self, options: SortOptions) -> Expr
pub fn sort_with(self, options: SortOptions) -> Expr
Sort with given options.
sourcepub fn map<F>(
self,
function: F,
output_type: NoEq<Arc<dyn FunctionOutputField + 'static>>
) -> Expr where
F: 'static + Fn(Series) -> Result<Series, PolarsError> + Send + Sync,
pub fn map<F>(
self,
function: F,
output_type: NoEq<Arc<dyn FunctionOutputField + 'static>>
) -> Expr where
F: 'static + Fn(Series) -> Result<Series, PolarsError> + Send + Sync,
Apply a function/closure once the logical plan get executed.
This function is very similar to Expr::apply
, but differs in how it handles aggregations.
map
should be used for operations that are independent of groups, e.g.multiply * 2
, orraise to the power
apply
should be used for operations that work on a group of data. e.g.sum
,count
, etc.
It is the responsibility of the caller that the schema is correct by giving the correct output_type. If None given the output type of the input expr is used.
sourcepub fn map_many<F>(
self,
function: F,
arguments: &[Expr],
output_type: NoEq<Arc<dyn FunctionOutputField + 'static>>
) -> Expr where
F: 'static + Fn(&mut [Series]) -> Result<Series, PolarsError> + Send + Sync,
pub fn map_many<F>(
self,
function: F,
arguments: &[Expr],
output_type: NoEq<Arc<dyn FunctionOutputField + 'static>>
) -> Expr where
F: 'static + Fn(&mut [Series]) -> Result<Series, PolarsError> + Send + Sync,
sourcepub fn map_list<F>(
self,
function: F,
output_type: NoEq<Arc<dyn FunctionOutputField + 'static>>
) -> Expr where
F: 'static + Fn(Series) -> Result<Series, PolarsError> + Send + Sync,
pub fn map_list<F>(
self,
function: F,
output_type: NoEq<Arc<dyn FunctionOutputField + 'static>>
) -> Expr where
F: 'static + Fn(Series) -> Result<Series, PolarsError> + Send + Sync,
Apply a function/closure once the logical plan get executed.
This function is very similar to apply, but differs in how it handles aggregations.
map
should be used for operations that are independent of groups, e.g.multiply * 2
, orraise to the power
apply
should be used for operations that work on a group of data. e.g.sum
,count
, etc.map_list
should be used when the function expects a list aggregated series.
sourcepub fn function_with_options<F>(
self,
function: F,
output_type: NoEq<Arc<dyn FunctionOutputField + 'static>>,
options: FunctionOptions
) -> Expr where
F: 'static + Fn(Series) -> Result<Series, PolarsError> + Send + Sync,
pub fn function_with_options<F>(
self,
function: F,
output_type: NoEq<Arc<dyn FunctionOutputField + 'static>>,
options: FunctionOptions
) -> Expr where
F: 'static + Fn(Series) -> Result<Series, PolarsError> + Send + Sync,
A function that cannot be expressed with map
or apply
and requires extra settings.
sourcepub fn apply<F>(
self,
function: F,
output_type: NoEq<Arc<dyn FunctionOutputField + 'static>>
) -> Expr where
F: 'static + Fn(Series) -> Result<Series, PolarsError> + Send + Sync,
pub fn apply<F>(
self,
function: F,
output_type: NoEq<Arc<dyn FunctionOutputField + 'static>>
) -> Expr where
F: 'static + Fn(Series) -> Result<Series, PolarsError> + Send + Sync,
Apply a function/closure over the groups. This should only be used in a groupby aggregation.
It is the responsibility of the caller that the schema is correct by giving the correct output_type. If None given the output type of the input expr is used.
This difference with map is that apply
will create a separate Series
per group.
map
should be used for operations that are independent of groups, e.g.multiply * 2
, orraise to the power
apply
should be used for operations that work on a group of data. e.g.sum
,count
, etc.
sourcepub fn apply_many<F>(
self,
function: F,
arguments: &[Expr],
output_type: NoEq<Arc<dyn FunctionOutputField + 'static>>
) -> Expr where
F: 'static + Fn(&mut [Series]) -> Result<Series, PolarsError> + Send + Sync,
pub fn apply_many<F>(
self,
function: F,
arguments: &[Expr],
output_type: NoEq<Arc<dyn FunctionOutputField + 'static>>
) -> Expr where
F: 'static + Fn(&mut [Series]) -> Result<Series, PolarsError> + Send + Sync,
Apply a function/closure over the groups with many arguments. This should only be used in a groupby aggregation.
See the Expr::apply
function for the differences between map
and apply
.
sourcepub fn is_infinite(self) -> Expr
pub fn is_infinite(self) -> Expr
Get mask of infinite values if dtype is Float
sourcepub fn is_not_nan(self) -> Expr
pub fn is_not_nan(self) -> Expr
Get inverse mask of NaN values if dtype is Float
sourcepub fn shift(self, periods: i64) -> Expr
pub fn shift(self, periods: i64) -> Expr
Shift the values in the array by some period. See the eager implementation.
sourcepub fn shift_and_fill(self, periods: i64, fill_value: Expr) -> Expr
pub fn shift_and_fill(self, periods: i64, fill_value: Expr) -> Expr
Shift the values in the array by some period and fill the resulting empty values.
sourcepub fn cumsum(self, reverse: bool) -> Expr
This is supported on crate feature cum_agg
only.
pub fn cumsum(self, reverse: bool) -> Expr
cum_agg
only.Get an array with the cumulative sum computed at every element
sourcepub fn cumprod(self, reverse: bool) -> Expr
This is supported on crate feature cum_agg
only.
pub fn cumprod(self, reverse: bool) -> Expr
cum_agg
only.Get an array with the cumulative product computed at every element
sourcepub fn cummin(self, reverse: bool) -> Expr
This is supported on crate feature cum_agg
only.
pub fn cummin(self, reverse: bool) -> Expr
cum_agg
only.Get an array with the cumulative min computed at every element
sourcepub fn cummax(self, reverse: bool) -> Expr
This is supported on crate feature cum_agg
only.
pub fn cummax(self, reverse: bool) -> Expr
cum_agg
only.Get an array with the cumulative max computed at every element
sourcepub fn product(self) -> Expr
This is supported on crate feature product
only.
pub fn product(self) -> Expr
product
only.Get the product aggreagtion of an expresion
sourcepub fn backward_fill(self) -> Expr
pub fn backward_fill(self) -> Expr
Fill missing value with next non-null.
sourcepub fn forward_fill(self) -> Expr
pub fn forward_fill(self) -> Expr
Fill missing value with previous non-null.
sourcepub fn round(self, decimals: u32) -> Expr
This is supported on crate feature round_series
only.
pub fn round(self, decimals: u32) -> Expr
round_series
only.Round underlying floating point array to given decimal numbers.
sourcepub fn floor(self) -> Expr
This is supported on crate feature round_series
only.
pub fn floor(self) -> Expr
round_series
only.Floor underlying floating point array to the lowest integers smaller or equal to the float value.
sourcepub fn ceil(self) -> Expr
This is supported on crate feature round_series
only.
pub fn ceil(self) -> Expr
round_series
only.Ceil underlying floating point array to the heighest integers smaller or equal to the float value.
sourcepub fn clip(self, min: f64, max: f64) -> Expr
This is supported on crate feature round_series
only.
pub fn clip(self, min: f64, max: f64) -> Expr
round_series
only.Clip underlying values to a set boundary.
sourcepub fn abs(self) -> Expr
This is supported on crate feature abs
only.
pub fn abs(self) -> Expr
abs
only.Convert all values to their absolute/positive value.
sourcepub fn over<E>(self, partition_by: E) -> Expr where
E: AsRef<[Expr]>,
pub fn over<E>(self, partition_by: E) -> Expr where
E: AsRef<[Expr]>,
Apply window function over a subgroup. This is similar to a groupby + aggregation + self join. Or similar to window functions in Postgres.
Example
#[macro_use] extern crate polars_core;
use polars_core::prelude::*;
use polars_lazy::prelude::*;
fn example() -> Result<()> {
let df = df! {
"groups" => &[1, 1, 2, 2, 1, 2, 3, 3, 1],
"values" => &[1, 2, 3, 4, 5, 6, 7, 8, 8]
}?;
let out = df
.lazy()
.select(&[
col("groups"),
sum("values").over([col("groups")]),
])
.collect()?;
dbg!(&out);
Ok(())
}
Outputs:
╭────────┬────────╮
│ groups ┆ values │
│ --- ┆ --- │
│ i32 ┆ i32 │
╞════════╪════════╡
│ 1 ┆ 16 │
├╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┤
│ 1 ┆ 16 │
├╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┤
│ 2 ┆ 13 │
├╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┤
│ 2 ┆ 13 │
├╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┤
│ ... ┆ ... │
├╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┤
│ 1 ┆ 16 │
├╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┤
│ 2 ┆ 13 │
├╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┤
│ 3 ┆ 15 │
├╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┤
│ 3 ┆ 15 │
├╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┤
│ 1 ┆ 16 │
╰────────┴────────╯
sourcepub fn fill_nan(self, fill_value: Expr) -> Expr
pub fn fill_nan(self, fill_value: Expr) -> Expr
Replace the floating point NaN
values by a value.
sourcepub fn count(self) -> Expr
pub fn count(self) -> Expr
Count the values of the Series or Get counts of the group by operation.
sourcepub fn is_duplicated(self) -> Expr
pub fn is_duplicated(self) -> Expr
Get a mask of duplicated values
pub fn xor(self, expr: Expr) -> Expr
sourcepub fn filter(self, predicate: Expr) -> Expr
pub fn filter(self, predicate: Expr) -> Expr
Filter a single column Should be used in aggregation context. If you want to filter on a DataFrame level, use LazyFrame::filter
sourcepub fn is_in(self, other: Expr) -> Expr
This is supported on crate feature is_in
only.
pub fn is_in(self, other: Expr) -> Expr
is_in
only.Check if the values of the left expression are in the lists of the right expr.
sourcepub fn sort_by<E, R>(self, by: E, reverse: R) -> Expr where
E: AsRef<[Expr]>,
R: AsRef<[bool]>,
pub fn sort_by<E, R>(self, by: E, reverse: R) -> Expr where
E: AsRef<[Expr]>,
R: AsRef<[bool]>,
Sort this column by the ordering of another column. Can also be used in a groupby context to sort the groups.
pub fn repeat_by(self, by: Expr) -> Expr
repeat_by
only.sourcepub fn is_first(self) -> Expr
This is supported on crate feature is_first
only.
pub fn is_first(self) -> Expr
is_first
only.Get a mask of the first unique value.
sourcepub fn mode(self) -> Expr
This is supported on crate feature mode
only.
pub fn mode(self) -> Expr
mode
only.Compute the mode(s) of this column. This is the most occurring value.
sourcepub fn keep_name(self) -> Expr
pub fn keep_name(self) -> Expr
Keep the original root name
use polars_core::prelude::*;
use polars_lazy::prelude::*;
fn example(df: LazyFrame) -> LazyFrame {
df.select([
// even thought the alias yields a different column name,
// `keep_name` will make sure that the original column name is used
col("*").alias("foo").keep_name()
])
}
sourcepub fn map_alias<F>(self, function: F) -> Expr where
F: 'static + Fn(&str) -> String + Send + Sync,
pub fn map_alias<F>(self, function: F) -> Expr where
F: 'static + Fn(&str) -> String + Send + Sync,
Define an alias by mapping a function over the original root column name.
sourcepub fn exclude(self, columns: impl IntoVec<String>) -> Expr
pub fn exclude(self, columns: impl IntoVec<String>) -> Expr
Exclude a column from a wildcard/regex selection.
You may also use regexes in the exclude as long as they start with ^
and end with $
/
Example
use polars_core::prelude::*;
use polars_lazy::prelude::*;
// Select all columns except foo.
fn example(df: DataFrame) -> LazyFrame {
df.lazy()
.select(&[
col("*").exclude(&["foo"])
])
}
pub fn exclude_dtype<D>(self, dtypes: D) -> Expr where
D: AsRef<[DataType]>,
pub fn interpolate(self) -> Expr
interpolate
only.sourcepub fn rolling_min(self, options: RollingOptions) -> Expr
This is supported on crate feature rolling_window
only.
pub fn rolling_min(self, options: RollingOptions) -> Expr
rolling_window
only.Apply a rolling min See: ChunkedArray::rolling_min
sourcepub fn rolling_max(self, options: RollingOptions) -> Expr
This is supported on crate feature rolling_window
only.
pub fn rolling_max(self, options: RollingOptions) -> Expr
rolling_window
only.Apply a rolling max See: ChunkedArray::rolling_max
sourcepub fn rolling_mean(self, options: RollingOptions) -> Expr
This is supported on crate feature rolling_window
only.
pub fn rolling_mean(self, options: RollingOptions) -> Expr
rolling_window
only.Apply a rolling mean See: ChunkedArray::rolling_mean
sourcepub fn rolling_sum(self, options: RollingOptions) -> Expr
This is supported on crate feature rolling_window
only.
pub fn rolling_sum(self, options: RollingOptions) -> Expr
rolling_window
only.Apply a rolling sum See: ChunkedArray::rolling_sum
sourcepub fn rolling_median(self, options: RollingOptions) -> Expr
This is supported on crate feature rolling_window
only.
pub fn rolling_median(self, options: RollingOptions) -> Expr
rolling_window
only.Apply a rolling median See:
ChunkedArray::rolling_median
sourcepub fn rolling_quantile(
self,
quantile: f64,
interpolation: QuantileInterpolOptions,
options: RollingOptions
) -> Expr
This is supported on crate feature rolling_window
only.
pub fn rolling_quantile(
self,
quantile: f64,
interpolation: QuantileInterpolOptions,
options: RollingOptions
) -> Expr
rolling_window
only.Apply a rolling quantile See:
ChunkedArray::rolling_quantile
sourcepub fn rolling_var(self, options: RollingOptions) -> Expr
This is supported on crate feature rolling_window
only.
pub fn rolling_var(self, options: RollingOptions) -> Expr
rolling_window
only.Apply a rolling variance
sourcepub fn rolling_std(self, options: RollingOptions) -> Expr
This is supported on crate feature rolling_window
only.
pub fn rolling_std(self, options: RollingOptions) -> Expr
rolling_window
only.Apply a rolling std-dev
sourcepub fn rolling_apply(
self,
f: Arc<dyn Fn(&Series) + Send + Sync + 'static>,
output_type: NoEq<Arc<dyn FunctionOutputField + 'static>>,
options: RollingOptions
) -> Expr
This is supported on crate feature rolling_window
only.
pub fn rolling_apply(
self,
f: Arc<dyn Fn(&Series) + Send + Sync + 'static>,
output_type: NoEq<Arc<dyn FunctionOutputField + 'static>>,
options: RollingOptions
) -> Expr
rolling_window
only.Apply a custom function over a rolling/ moving window of the array. This has quite some dynamic dispatch, so prefer rolling_min, max, mean, sum over this.
sourcepub fn rolling_apply_float<F>(self, window_size: usize, f: F) -> Expr where
F: 'static + Fn(&ChunkedArray<Float64Type>) -> Option<f64> + Send + Sync + Copy,
This is supported on crate feature rolling_window
only.
pub fn rolling_apply_float<F>(self, window_size: usize, f: F) -> Expr where
F: 'static + Fn(&ChunkedArray<Float64Type>) -> Option<f64> + Send + Sync + Copy,
rolling_window
only.Apply a custom function over a rolling/ moving window of the array. Prefer this over rolling_apply in case of floating point numbers as this is faster. This has quite some dynamic dispatch, so prefer rolling_min, max, mean, sum over this.
pub fn rank(self, options: RankOptions) -> Expr
rank
only.pub fn diff(self, n: usize, null_behavior: NullBehavior) -> Expr
diff
only.sourcepub fn upper_bound(self) -> Expr
pub fn upper_bound(self) -> Expr
Get maximal value that could be hold by this dtype.
sourcepub fn lower_bound(self) -> Expr
pub fn lower_bound(self) -> Expr
Get minimal value that could be hold by this dtype.
pub fn reshape(self, dims: &[i64]) -> Expr
pub fn shuffle(self, seed: u64) -> Expr
pub fn sample_frac(self, frac: f64, with_replacement: bool, seed: u64) -> Expr
sourcepub fn to_float(self) -> Expr
pub fn to_float(self) -> Expr
This is useful if an apply
function needs a floating point type.
Because this cast is done on a map
level, it will be faster.
pub fn str(self) -> StringNameSpace
pub fn dt(self) -> DateLikeNameSpace
pub fn arr(self) -> ListNameSpace
pub fn cat(self) -> CategoricalNameSpace
pub fn struct_(self) -> StructNameSpace
Trait Implementations
sourceimpl<'a> IntoIterator for &'a Expr
impl<'a> IntoIterator for &'a Expr
impl StructuralPartialEq for Expr
Auto Trait Implementations
impl !RefUnwindSafe for Expr
impl Send for Expr
impl Sync for Expr
impl Unpin for Expr
impl !UnwindSafe for Expr
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
sourceimpl<T> Pointable for T
impl<T> Pointable for T
sourceimpl<T> ToOwned for T where
T: Clone,
impl<T> ToOwned for T where
T: Clone,
type Owned = T
type Owned = T
The resulting type after obtaining ownership.
sourcefn clone_into(&self, target: &mut T)
fn clone_into(&self, target: &mut T)
toowned_clone_into
)Uses borrowed data to replace owned data, usually by cloning. Read more