Path: blob/main/crates/polars-ops/src/series/ops/pct_change.rs
6939 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() {12DataType::Float64 | DataType::Float32 => {},13_ => return pct_change(&s.cast(&DataType::Float64)?, n),14}1516let fill_null_s = s.fill_null(FillNullStrategy::Forward(None))?;1718let n_s = n.cast(&DataType::Int64)?;19if let Some(n) = n_s.i64()?.get(0) {20diff(&fill_null_s, n, NullBehavior::Ignore)?.divide(&fill_null_s.shift(n))21} else {22Ok(Series::full_null(s.name().clone(), s.len(), s.dtype()))23}24}252627