mirror of
https://github.com/nushell/nushell.git
synced 2025-08-09 07:46:01 +02:00
Series Operation (#3563)
* Sample command * Join command with checks * More dataframes commands * Groupby and aggregate commands * Missing feature dataframe flag * Renamed file * New commands for dataframes * error parser and df reference * filter command for dataframes * removed name from nu_dataframe * commands to save to parquet and csv * polars new version * new dataframe commands * series type and print * Series basic arithmetics * Add new column to dataframe * Command names changed to nushell standard
This commit is contained in:
@ -12,6 +12,9 @@ use num_bigint::BigInt;
|
||||
use num_traits::{ToPrimitive, Zero};
|
||||
use std::collections::HashMap;
|
||||
|
||||
#[cfg(feature = "dataframe")]
|
||||
use nu_protocol::dataframe::{NuSeries, PolarsData};
|
||||
|
||||
pub struct Date;
|
||||
|
||||
impl Date {
|
||||
@ -491,6 +494,51 @@ pub fn compute_values(
|
||||
}
|
||||
_ => Err((left.type_name(), right.type_name())),
|
||||
},
|
||||
#[cfg(feature = "dataframe")]
|
||||
(
|
||||
UntaggedValue::DataFrame(PolarsData::Series(lhs)),
|
||||
UntaggedValue::DataFrame(PolarsData::Series(rhs)),
|
||||
) => {
|
||||
if lhs.as_ref().dtype() == rhs.as_ref().dtype() {
|
||||
let result = match operator {
|
||||
Operator::Plus => {
|
||||
let mut res = lhs.as_ref() + rhs.as_ref();
|
||||
let name = format!("sum_{}_{}", lhs.as_ref().name(), rhs.as_ref().name());
|
||||
let res = res.rename(name.as_ref());
|
||||
Ok(res.clone())
|
||||
}
|
||||
Operator::Minus => {
|
||||
let mut res = lhs.as_ref() - rhs.as_ref();
|
||||
let name = format!("sub_{}_{}", lhs.as_ref().name(), rhs.as_ref().name());
|
||||
let res = res.rename(name.as_ref());
|
||||
Ok(res.clone())
|
||||
}
|
||||
Operator::Multiply => {
|
||||
let mut res = lhs.as_ref() * rhs.as_ref();
|
||||
let name = format!("mul_{}_{}", lhs.as_ref().name(), rhs.as_ref().name());
|
||||
let res = res.rename(name.as_ref());
|
||||
Ok(res.clone())
|
||||
}
|
||||
Operator::Divide => {
|
||||
let mut res = lhs.as_ref() / rhs.as_ref();
|
||||
let name = format!("div_{}_{}", lhs.as_ref().name(), rhs.as_ref().name());
|
||||
let res = res.rename(name.as_ref());
|
||||
Ok(res.clone())
|
||||
}
|
||||
Operator::Modulo => {
|
||||
let mut res = lhs.as_ref() % rhs.as_ref();
|
||||
let name = format!("mod_{}_{}", lhs.as_ref().name(), rhs.as_ref().name());
|
||||
let res = res.rename(name.as_ref());
|
||||
Ok(res.clone())
|
||||
}
|
||||
_ => Err((left.type_name(), right.type_name())),
|
||||
}?;
|
||||
|
||||
Ok(NuSeries::series_to_untagged(result))
|
||||
} else {
|
||||
Err((left.type_name(), right.type_name()))
|
||||
}
|
||||
}
|
||||
_ => Err((left.type_name(), right.type_name())),
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user