pub struct Series<T>where
T: BlackJackData,{
pub name: Option<String>,
pub values: Vec<T>,
/* private fields */
}Expand description
Series struct for containing underlying Array and other meta data.
Fields§
§name: Option<String>Name of the series, if added to a dataframe without a name, it will be assigned a default name equalling the count of columns in the dataframe.
values: Vec<T>The underlying values of the Series
Implementations§
Source§impl<T> Series<T>where
T: BlackJackData,
Constructor methods for Series<T>
impl<T> Series<T>where
T: BlackJackData,
Constructor methods for Series<T>
Sourcepub fn arange(start: T, stop: T) -> Selfwhere
T: Integer + BlackJackData + ToPrimitive,
Range<T>: Iterator,
Vec<T>: FromIterator<<Range<T> as Iterator>::Item>,
pub fn arange(start: T, stop: T) -> Selfwhere
T: Integer + BlackJackData + ToPrimitive,
Range<T>: Iterator,
Vec<T>: FromIterator<<Range<T> as Iterator>::Item>,
Create a new Series struct from an integer range with one step increments.
§Example
use blackjack::prelude::*;
let series: Series<i32> = Series::arange(0, 10);Sourcepub fn drop_positions<I>(&mut self, positions: I)where
I: IntoIterator<Item = usize>,
pub fn drop_positions<I>(&mut self, positions: I)where
I: IntoIterator<Item = usize>,
Drop positions of the Series
Sourcepub fn iloc<'b, I>(&self, idx_vals: I) -> Vec<&T>where
I: IntoIterator<Item = &'b usize>,
pub fn iloc<'b, I>(&self, idx_vals: I) -> Vec<&T>where
I: IntoIterator<Item = &'b usize>,
Fetch values from the series by matching index positions, not by index value.
No data copies are made, and currently this is not done in parallel. As by currently single threaded exceeds parallel execution up to ~10m elements. As the majority of use cases have less than this amount, we’ve opted for single threading. If you need concurrent execution, please file an issue at our github. :-)
§Example
use blackjack::prelude::*;
let mut series = Series::arange(0, 10000); // Index values end up being 0-10000 by default here
let vals = series.iloc(&vec![250, 500, 1000, 2000, 4000, 5000]); // ~300ns, ~28x faster than Pandas
assert_eq!(vals, vec![&250, &500, &1000, &2000, &4000, &5000]);Sourcepub fn rolling(&self, window: usize) -> Rolling<'_, T>
pub fn rolling(&self, window: usize) -> Rolling<'_, T>
Calculate a predefined rolling aggregation
See Rolling for additional functionality.
§Example
use blackjack::prelude::*;
use float_cmp::ApproxEq;
let series = Series::from_vec(vec![0, 1, 2, 3, 4, 5]);
let rolled: Series<f64> = series.rolling(4).mean().unwrap();
assert_eq!(rolled.len(), 6);
// vals in indexes 0 thru 2 should be NaN as they are inside the window
assert_eq!(rolled[0..2].iter().all(|v| v.is_nan()), true);
assert_eq!(rolled[3], 1.5);
assert_eq!(rolled[4], 2.5);
assert_eq!(rolled[5], 3.5);Sourcepub fn isna<'a>(&'a self) -> impl Iterator<Item = bool> + 'awhere
T: Float,
pub fn isna<'a>(&'a self) -> impl Iterator<Item = bool> + 'awhere
T: Float,
Return an iterable of booleans determining if any element is NaN
§Example
use blackjack::prelude::*;
let mut series = Series::from_vec(vec![0, 1, 2])
.astype::<f32>()
.unwrap();
// No NaNs currently
assert_eq!(series.isna().collect::<Vec<bool>>(), vec![false, false, false]);
// Insert a NaN at index zero
series[0] = num::Float::nan();
assert_eq!(series.isna().collect::<Vec<bool>>(), vec![true, false, false]);Sourcepub fn all<F>(&self, condition: F) -> bool
pub fn all<F>(&self, condition: F) -> bool
Determine if all elements in the Series meet a given condition
This will stop iteration after encountering the first element which breaks the condition.
§Example
use blackjack::prelude::*;
let series = Series::from_vec(vec![1, 2, 3, 4]);
assert_eq!(series.all(|x| *x > 0), true);
assert_eq!(series.all(|x| *x > 2), false);Sourcepub fn all_equal(&self) -> boolwhere
T: PartialEq,
pub fn all_equal(&self) -> boolwhere
T: PartialEq,
Check if all elements with the Series are equal
§Example
use blackjack::prelude::*;
let series = Series::from_vec(vec![1, 1, 1, 1, 1]);
assert!(series.all_equal());Sourcepub fn any<F>(&self, condition: F) -> bool
pub fn any<F>(&self, condition: F) -> bool
Determine if any element in the Series meets a given condition
This will stop iteration after encountering the first element which meets conditions supplied.
Sourcepub fn cartesian_product<O>(&self, other: &Series<O>) -> (Series<T>, Series<O>)where
O: BlackJackData,
pub fn cartesian_product<O>(&self, other: &Series<O>) -> (Series<T>, Series<O>)where
O: BlackJackData,
Create a cartesian product of this series and another, returns a pair of
Series representing the cartesian product
§Example
use blackjack::prelude::*;
let series1 = Series::from_vec(vec![0, 1]);
let series2 = Series::from_vec(vec![1, 2]);
let (cart_prod1, cart_prod2) = series1.cartesian_product(&series2);
assert_eq!(cart_prod1.values, vec![0, 0, 1, 1]);
assert_eq!(cart_prod2.values, vec![1, 2, 1, 2]);Sourcepub fn positions<'a, F>(
&'a self,
condition: F,
) -> impl Iterator<Item = usize> + 'a
pub fn positions<'a, F>( &'a self, condition: F, ) -> impl Iterator<Item = usize> + 'a
Return the positions of where a given condition evaluates to true
This is somewhat akin to the pandas where method.
§Example
use blackjack::prelude::*;
let series = Series::from_vec(vec![1, 2, 1, 2]);
let indexes_of_ones = series.positions(|x| *x == 1).collect::<Vec<usize>>();
assert_eq!(indexes_of_ones, vec![0, 2]);Sourcepub fn map_par<B, F>(self, func: F) -> Series<B>
pub fn map_par<B, F>(self, func: F) -> Series<B>
Map a function over a series in parallel
Function takes some type T and returns some type B which
has BlackJackData implemented.
§Example
use blackjack::prelude::*;
let series = Series::from_vec(vec![1, 1, 1, 1]);
let new_series = series.map_par(|x| x * 2);
assert_eq!(new_series.sum(), 8);Sourcepub fn map<B, F>(self, func: F) -> Series<B>where
B: BlackJackData,
F: Fn(T) -> B,
pub fn map<B, F>(self, func: F) -> Series<B>where
B: BlackJackData,
F: Fn(T) -> B,
Map a function over a series in a single thread
Function takes some type T and returns some type B which
has BlackJackData implemented.
Sourcepub fn unique(&self) -> Series<T>where
T: PartialOrd + Copy,
pub fn unique(&self) -> Series<T>where
T: PartialOrd + Copy,
Get a series of the unique elements held in this series
§Example
use blackjack::prelude::*;
let series: Series<i32> = Series::from_vec(vec![1, 2, 1, 0, 1, 0, 1, 1]);
let unique: Series<i32> = series.unique();
assert_eq!(unique, Series::from_vec(vec![0, 1, 2]));Sourcepub fn from_vec(vec: Vec<T>) -> Self
pub fn from_vec(vec: Vec<T>) -> Self
Create a new Series struct from a vector, where T is supported by BlackJackData.
§Example
use blackjack::prelude::*;
let series: Series<i32> = Series::from_vec(vec![1, 2, 3]);Sourcepub fn name(&self) -> Option<String>
pub fn name(&self) -> Option<String>
Get the name of the series; Series may not be assigned a string,
so an Option is returned.
§Example
use blackjack::prelude::*;
let mut series = Series::from_vec(vec![1, 2, 3]);
series.set_name("my-series");
assert_eq!(series.name(), Some("my-series".to_string()));Sourcepub fn mode(&self) -> Result<Self, BlackJackError>
pub fn mode(&self) -> Result<Self, BlackJackError>
Sourcepub fn var(&self, ddof: f64) -> Result<f64, BlackJackError>where
T: ToPrimitive + Num,
pub fn var(&self, ddof: f64) -> Result<f64, BlackJackError>where
T: ToPrimitive + Num,
Calculate the variance of the series, using either population or sample variance
Population:
ddof== 0_f64 Sample:ddof== 1_f64
Sourcepub fn std(&self, ddof: f64) -> Result<f64, BlackJackError>
pub fn std(&self, ddof: f64) -> Result<f64, BlackJackError>
Calculate the standard deviation of the series
§Example
use blackjack::prelude::*;
use float_cmp::ApproxEq;
let series = Series::arange(0, 10).astype::<f32>().unwrap();
let std = series.std(1_f64).unwrap(); // using population ddof (sample variance == 0_f64)
assert_eq!(std, 3.0276503540974917);Sourcepub fn sum(&self) -> T
pub fn sum(&self) -> T
Sum a given series, yielding the same type as the elements stored in the series.
Sourcepub fn mean(&self) -> Result<f64, BlackJackError>
pub fn mean(&self) -> Result<f64, BlackJackError>
Average / Mean of a given series - Requires specifying desired float return annotation
§Example:
use blackjack::prelude::*;
let series = Series::arange(0, 5);
let mean = series.mean();
match mean {
Ok(result) => {
println!("Result is: {}", &result);
assert_eq!(result, 2.0);
},
Err(err) => {
panic!("Was unable to compute mean, error: {}", err);
}
}Sourcepub fn quantile(&self, quantile: f64) -> Result<f64, BlackJackError>where
T: ToPrimitive + BlackJackData,
pub fn quantile(&self, quantile: f64) -> Result<f64, BlackJackError>where
T: ToPrimitive + BlackJackData,
Calculate the quantile of the series
§Example:
use blackjack::prelude::*;
let series = Series::arange(0, 100).astype::<f32>().unwrap();
let qtl = series.quantile(0.5).unwrap(); // `49.5_f32`
assert!(qtl < 49.51);
assert!(qtl > 49.49);Sourcepub fn median(&self) -> Result<f64, BlackJackError>
pub fn median(&self) -> Result<f64, BlackJackError>
Calculate the median of a series
Sourcepub fn min(&self) -> Result<T, BlackJackError>
pub fn min(&self) -> Result<T, BlackJackError>
Find the minimum of the series. If several elements are equally minimum, the first element is returned. If it’s empty, an Error will be returned.
§Example
use blackjack::prelude::*;
let series: Series<i32> = Series::arange(10, 100);
assert_eq!(series.min().unwrap(), 10);Sourcepub fn max(&self) -> Result<T, BlackJackError>
pub fn max(&self) -> Result<T, BlackJackError>
Exibits the same behavior and usage of Series::min, only
yielding the Result of a maximum.
Sourcepub fn dtype(&self) -> Option<DType>
pub fn dtype(&self) -> Option<DType>
Get the dtype, returns None if series dtype is unknown.
in such a case, calling .astype() to coerce all types to a single
type is needed.
Sourcepub fn append<V: Into<T>>(&mut self, val: V)
pub fn append<V: Into<T>>(&mut self, val: V)
Append a BlackJackData element to the Series
§Example
use blackjack::prelude::*;
let mut series = Series::from_vec(vec![0, 1, 2]);
assert_eq!(series.len(), 3);
series.append(3);
assert_eq!(series.len(), 4);Sourcepub fn into_raw(self) -> *mut Self
pub fn into_raw(self) -> *mut Self
As boxed pointer, recoverable by Box::from_raw(ptr) or
Series::from_raw(*mut Self)
Sourcepub fn groupby(&self, keys: &Series<T>) -> SeriesGroupBy<T>where
T: ToPrimitive,
pub fn groupby(&self, keys: &Series<T>) -> SeriesGroupBy<T>where
T: ToPrimitive,
Group by method for grouping elements in a Series
by key.
§Example
use blackjack::prelude::*;
let series = Series::from_vec(vec![1, 2, 3, 1, 2, 3]);
let keys = Series::from_vec(vec![4, 5, 6, 4, 5, 6]);
let grouped: Series<i32> = series.groupby(&keys).sum();
assert_eq!(grouped.len(), 3);
let mut vals = grouped.into_vec();
vals.sort();
assert_eq!(vals, vec![2, 4, 6]);Trait Implementations§
Source§impl<T> Add<T> for Series<T>where
T: Num + Copy + BlackJackData + Send + Sync,
Vec<T>: IntoParallelIterator<Item = T>,
<Vec<T> as IntoParallelIterator>::Iter: IndexedParallelIterator,
Support series + scalar
impl<T> Add<T> for Series<T>where
T: Num + Copy + BlackJackData + Send + Sync,
Vec<T>: IntoParallelIterator<Item = T>,
<Vec<T> as IntoParallelIterator>::Iter: IndexedParallelIterator,
Support series + scalar
Source§impl<T> AddAssign<T> for Series<T>where
T: Num + Copy + BlackJackData + Send + Sync + FromPrimitive + AddAssign<T>,
Vec<T>: IntoParallelIterator<Item = T>,
<Vec<T> as IntoParallelIterator>::Iter: IndexedParallelIterator,
Support series += scalar
impl<T> AddAssign<T> for Series<T>where
T: Num + Copy + BlackJackData + Send + Sync + FromPrimitive + AddAssign<T>,
Vec<T>: IntoParallelIterator<Item = T>,
<Vec<T> as IntoParallelIterator>::Iter: IndexedParallelIterator,
Support series += scalar
Source§fn add_assign(&mut self, scalar_val: T)
fn add_assign(&mut self, scalar_val: T)
+= operation. Read moreSource§impl<T> AddAssign for Series<T>where
T: BlackJackData + AddAssign,
impl<T> AddAssign for Series<T>where
T: BlackJackData + AddAssign,
Source§fn add_assign(&mut self, other: Series<T>)
fn add_assign(&mut self, other: Series<T>)
+= operation. Read moreSource§impl<'de, T> Deserialize<'de> for Series<T>where
T: BlackJackData + Deserialize<'de>,
impl<'de, T> Deserialize<'de> for Series<T>where
T: BlackJackData + Deserialize<'de>,
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl<T> Div<T> for Series<T>where
T: Num + Copy + BlackJackData + Send + Sync,
Vec<T>: IntoParallelIterator<Item = T>,
<Vec<T> as IntoParallelIterator>::Iter: IndexedParallelIterator,
Support series - scalar
impl<T> Div<T> for Series<T>where
T: Num + Copy + BlackJackData + Send + Sync,
Vec<T>: IntoParallelIterator<Item = T>,
<Vec<T> as IntoParallelIterator>::Iter: IndexedParallelIterator,
Support series - scalar
Source§impl<T> DivAssign<T> for Series<T>where
T: Num + Copy + BlackJackData + Send + Sync + DivAssign<T>,
Vec<T>: IntoParallelIterator<Item = T>,
<Vec<T> as IntoParallelIterator>::Iter: IndexedParallelIterator,
Support series += scalar
impl<T> DivAssign<T> for Series<T>where
T: Num + Copy + BlackJackData + Send + Sync + DivAssign<T>,
Vec<T>: IntoParallelIterator<Item = T>,
<Vec<T> as IntoParallelIterator>::Iter: IndexedParallelIterator,
Support series += scalar
Source§fn div_assign(&mut self, scalar_val: T)
fn div_assign(&mut self, scalar_val: T)
/= operation. Read moreSource§impl<T> DivAssign for Series<T>where
T: BlackJackData + DivAssign,
impl<T> DivAssign for Series<T>where
T: BlackJackData + DivAssign,
Source§fn div_assign(&mut self, other: Series<T>)
fn div_assign(&mut self, other: Series<T>)
/= operation. Read moreSource§impl<T: BlackJackData> From<&Series<T>> for SeriesMeta
impl<T: BlackJackData> From<&Series<T>> for SeriesMeta
Source§fn from(series: &Series<T>) -> SeriesMeta
fn from(series: &Series<T>) -> SeriesMeta
Source§impl IntoIterator for Series<String>
impl IntoIterator for Series<String>
Source§impl IntoIterator for Series<f32>
impl IntoIterator for Series<f32>
Source§impl IntoIterator for Series<f64>
impl IntoIterator for Series<f64>
Source§impl IntoIterator for Series<i32>
impl IntoIterator for Series<i32>
Source§impl IntoIterator for Series<i64>
impl IntoIterator for Series<i64>
Source§impl<T> Mul<T> for Series<T>where
T: Num + Copy + BlackJackData + Send + Sync,
Vec<T>: IntoParallelIterator<Item = T>,
<Vec<T> as IntoParallelIterator>::Iter: IndexedParallelIterator,
Support series * scalar
impl<T> Mul<T> for Series<T>where
T: Num + Copy + BlackJackData + Send + Sync,
Vec<T>: IntoParallelIterator<Item = T>,
<Vec<T> as IntoParallelIterator>::Iter: IndexedParallelIterator,
Support series * scalar
Source§impl<T> MulAssign<T> for Series<T>where
T: Num + Copy + BlackJackData + Send + Sync + MulAssign<T>,
Vec<T>: IntoParallelIterator<Item = T>,
<Vec<T> as IntoParallelIterator>::Iter: IndexedParallelIterator,
impl<T> MulAssign<T> for Series<T>where
T: Num + Copy + BlackJackData + Send + Sync + MulAssign<T>,
Vec<T>: IntoParallelIterator<Item = T>,
<Vec<T> as IntoParallelIterator>::Iter: IndexedParallelIterator,
Source§fn mul_assign(&mut self, scalar_val: T)
fn mul_assign(&mut self, scalar_val: T)
*= operation. Read moreSource§impl<T> MulAssign for Series<T>where
T: BlackJackData + MulAssign,
impl<T> MulAssign for Series<T>where
T: BlackJackData + MulAssign,
Source§fn mul_assign(&mut self, other: Series<T>)
fn mul_assign(&mut self, other: Series<T>)
*= operation. Read moreSource§impl<T> PartialOrd for Series<T>where
T: BlackJackData + PartialOrd,
impl<T> PartialOrd for Series<T>where
T: BlackJackData + PartialOrd,
Source§impl<T> Sub<T> for Series<T>where
T: Num + Copy + BlackJackData + Send + Sync + Sub,
Vec<T>: IntoParallelIterator<Item = T>,
<Vec<T> as IntoParallelIterator>::Iter: IndexedParallelIterator,
Support series - scalar
impl<T> Sub<T> for Series<T>where
T: Num + Copy + BlackJackData + Send + Sync + Sub,
Vec<T>: IntoParallelIterator<Item = T>,
<Vec<T> as IntoParallelIterator>::Iter: IndexedParallelIterator,
Support series - scalar
Source§impl<T> SubAssign<T> for Series<T>where
T: Num + Copy + BlackJackData + Send + Sync + SubAssign<T>,
Vec<T>: IntoParallelIterator<Item = T>,
<Vec<T> as IntoParallelIterator>::Iter: IndexedParallelIterator,
Support series -= scalar
impl<T> SubAssign<T> for Series<T>where
T: Num + Copy + BlackJackData + Send + Sync + SubAssign<T>,
Vec<T>: IntoParallelIterator<Item = T>,
<Vec<T> as IntoParallelIterator>::Iter: IndexedParallelIterator,
Support series -= scalar
Source§fn sub_assign(&mut self, scalar_val: T)
fn sub_assign(&mut self, scalar_val: T)
-= operation. Read moreSource§impl<T> SubAssign for Series<T>where
T: BlackJackData + SubAssign,
impl<T> SubAssign for Series<T>where
T: BlackJackData + SubAssign,
Source§fn sub_assign(&mut self, other: Series<T>)
fn sub_assign(&mut self, other: Series<T>)
-= operation. Read moreimpl<T> StructuralPartialEq for Series<T>where
T: BlackJackData,
Auto Trait Implementations§
impl<T> Freeze for Series<T>
impl<T> RefUnwindSafe for Series<T>where
T: RefUnwindSafe,
impl<T> Send for Series<T>
impl<T> Sync for Series<T>where
T: Sync,
impl<T> Unpin for Series<T>where
T: Unpin,
impl<T> UnwindSafe for Series<T>where
T: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more