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