Path: blob/main/crates/polars-ops/src/series/ops/pct_change.rs
8501 views
use polars_core::prelude::*;1use polars_core::series::ops::NullBehavior;23use crate::prelude::diff;45pub fn pct_change(s: &Series, n: &Series) -> PolarsResult<Series> {6polars_ensure!(7n.len() == 1,8ComputeError: "n must be a single value."9);1011match s.dtype() {12#[cfg(feature = "dtype-f16")]13DataType::Float16 => {},14DataType::Float64 | DataType::Float32 => {},15_ => return pct_change(&s.cast(&DataType::Float64)?, n),16}1718let n_s = n.cast(&DataType::Int64)?;19if let Some(n) = n_s.i64()?.get(0) {20diff(s, n, NullBehavior::Ignore)?.divide(&s.shift(n))21} else {22Ok(Series::full_null(s.name().clone(), s.len(), s.dtype()))23}24}252627