Path: blob/main/crates/polars-ops/src/series/ops/diff.rs
6939 views
use polars_core::prelude::*;1use polars_core::series::ops::NullBehavior;23pub fn diff(s: &Series, n: i64, null_behavior: NullBehavior) -> PolarsResult<Series> {4use DataType::*;5let s = match s.dtype() {6UInt8 => s.cast(&Int16)?,7UInt16 => s.cast(&Int32)?,8UInt32 | UInt64 => s.cast(&Int64)?,9_ => s.clone(),10};1112match null_behavior {13NullBehavior::Ignore => &s - &s.shift(n),14NullBehavior::Drop if n < 0 => {15let n = -n as usize;16let len = s.len() - n;17&s.slice(0, len) - &s.slice(n as i64, len)18},19NullBehavior::Drop => {20let n = n as usize;21let len = s.len() - n;22&s.slice(n as i64, len) - &s.slice(0, len)23},24}25}262728