Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
pola-rs
GitHub Repository: pola-rs/polars
Path: blob/main/crates/polars-ops/src/series/ops/pct_change.rs
6939 views
1
use polars_core::prelude::*;
2
use polars_core::series::ops::NullBehavior;
3
4
use crate::prelude::diff;
5
6
pub fn pct_change(s: &Series, n: &Series) -> PolarsResult<Series> {
7
polars_ensure!(
8
n.len() == 1,
9
ComputeError: "n must be a single value."
10
);
11
12
match s.dtype() {
13
DataType::Float64 | DataType::Float32 => {},
14
_ => return pct_change(&s.cast(&DataType::Float64)?, n),
15
}
16
17
let fill_null_s = s.fill_null(FillNullStrategy::Forward(None))?;
18
19
let n_s = n.cast(&DataType::Int64)?;
20
if let Some(n) = n_s.i64()?.get(0) {
21
diff(&fill_null_s, n, NullBehavior::Ignore)?.divide(&fill_null_s.shift(n))
22
} else {
23
Ok(Series::full_null(s.name().clone(), s.len(), s.dtype()))
24
}
25
}
26
27