Path: blob/main/crates/polars-ops/src/chunked_array/array/dispersion.rs
6939 views
use super::*;12pub(super) fn mean_with_nulls(ca: &ArrayChunked) -> PolarsResult<Series> {3let mut out = match ca.inner_dtype() {4DataType::Float32 => {5let out: Float32Chunked = ca6.apply_amortized_generic(|s| s.and_then(|s| s.as_ref().mean().map(|v| v as f32)))7.with_name(ca.name().clone());8out.into_series()9},10#[cfg(feature = "dtype-duration")]11DataType::Duration(tu) => {12let out: Int64Chunked = ca13.apply_amortized_generic(|s| s.and_then(|s| s.as_ref().mean().map(|v| v as i64)))14.with_name(ca.name().clone());15out.into_duration(*tu).into_series()16},17_ => {18let out: Float64Chunked = ca19.apply_amortized_generic(|s| s.and_then(|s| s.as_ref().mean()))20.with_name(ca.name().clone());21out.into_series()22},23};24out.rename(ca.name().clone());25Ok(out)26}2728pub(super) fn median_with_nulls(ca: &ArrayChunked) -> PolarsResult<Series> {29let mut out = match ca.inner_dtype() {30DataType::Float32 => {31let out: Float32Chunked = ca32.apply_amortized_generic(|s| s.and_then(|s| s.as_ref().median().map(|v| v as f32)))33.with_name(ca.name().clone());34out.into_series()35},36#[cfg(feature = "dtype-duration")]37DataType::Duration(tu) => {38let out: Int64Chunked = ca39.apply_amortized_generic(|s| s.and_then(|s| s.as_ref().median().map(|v| v as i64)))40.with_name(ca.name().clone());41out.into_duration(*tu).into_series()42},43_ => {44let out: Float64Chunked = ca45.apply_amortized_generic(|s| s.and_then(|s| s.as_ref().median()))46.with_name(ca.name().clone());47out.into_series()48},49};50out.rename(ca.name().clone());51Ok(out)52}5354pub(super) fn std_with_nulls(ca: &ArrayChunked, ddof: u8) -> PolarsResult<Series> {55let mut out = match ca.inner_dtype() {56DataType::Float32 => {57let out: Float32Chunked = ca58.apply_amortized_generic(|s| s.and_then(|s| s.as_ref().std(ddof).map(|v| v as f32)))59.with_name(ca.name().clone());60out.into_series()61},62#[cfg(feature = "dtype-duration")]63DataType::Duration(tu) => {64let out: Int64Chunked = ca65.apply_amortized_generic(|s| s.and_then(|s| s.as_ref().std(ddof).map(|v| v as i64)))66.with_name(ca.name().clone());67out.into_duration(*tu).into_series()68},69_ => {70let out: Float64Chunked = {71ca.amortized_iter()72.map(|s| s.and_then(|s| s.as_ref().std(ddof)))73.collect()74};75out.into_series()76},77};78out.rename(ca.name().clone());79Ok(out)80}8182pub(super) fn var_with_nulls(ca: &ArrayChunked, ddof: u8) -> PolarsResult<Series> {83let mut out = match ca.inner_dtype() {84DataType::Float32 => {85let out: Float32Chunked = ca86.apply_amortized_generic(|s| s.and_then(|s| s.as_ref().var(ddof).map(|v| v as f32)))87.with_name(ca.name().clone());88out.into_series()89},90#[cfg(feature = "dtype-duration")]91DataType::Duration(TimeUnit::Milliseconds) => {92let out: Int64Chunked = ca93.apply_amortized_generic(|s| s.and_then(|s| s.as_ref().var(ddof).map(|v| v as i64)))94.with_name(ca.name().clone());95out.into_duration(TimeUnit::Milliseconds).into_series()96},97#[cfg(feature = "dtype-duration")]98DataType::Duration(TimeUnit::Microseconds | TimeUnit::Nanoseconds) => {99let out: Int64Chunked = ca100.cast(&DataType::Array(101Box::new(DataType::Duration(TimeUnit::Milliseconds)),102ca.width(),103))104.unwrap()105.array()106.unwrap()107.apply_amortized_generic(|s| s.and_then(|s| s.as_ref().var(ddof).map(|v| v as i64)))108.with_name(ca.name().clone());109out.into_duration(TimeUnit::Milliseconds).into_series()110},111_ => {112let out: Float64Chunked = ca113.apply_amortized_generic(|s| s.and_then(|s| s.as_ref().var(ddof)))114.with_name(ca.name().clone());115out.into_series()116},117};118out.rename(ca.name().clone());119Ok(out)120}121122123