mirror of
https://github.com/Magnus167/msyrs.git
synced 2025-08-20 13:00:01 +00:00
Add pivot_wide_dataframe_to_qdf function for transforming ticker dataframes
This commit is contained in:
parent
b20659e04d
commit
bbdbc3d8e6
@ -66,6 +66,41 @@ pub fn pivot_dataframe_by_ticker(
|
|||||||
Ok(new_df)
|
Ok(new_df)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Pivot ticker dataframe to qdf.
|
||||||
|
#[allow(dead_code)]
|
||||||
|
pub fn pivot_wide_dataframe_to_qdf(
|
||||||
|
df: DataFrame,
|
||||||
|
metric: Option<String>,
|
||||||
|
) -> Result<DataFrame, Box<dyn Error>> {
|
||||||
|
// df list of dataframes
|
||||||
|
let mut df_vec: Vec<DataFrame> = Vec::new();
|
||||||
|
// if no metric is provided, set it to 'value'
|
||||||
|
let metric = metric.unwrap_or("value".into());
|
||||||
|
for tkr in df.get_column_names() {
|
||||||
|
if tkr == "real_date" {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
let mut new_df = DataFrame::new(vec![df.column("real_date")?.clone()])?;
|
||||||
|
// copy the column to the new dataframe
|
||||||
|
new_df.with_column(df.column(tkr)?.clone())?;
|
||||||
|
new_df.rename(tkr, metric.clone().into())?;
|
||||||
|
// add the cid and xcat columns
|
||||||
|
let (cid, xcat) = split_ticker(tkr.to_string())?;
|
||||||
|
new_df.with_column(Series::new("cid".into(), vec![cid]))?;
|
||||||
|
new_df.with_column(Series::new("xcat".into(), vec![xcat]))?;
|
||||||
|
df_vec.push(new_df);
|
||||||
|
}
|
||||||
|
// create a new dataframe, concatting row-wise
|
||||||
|
let mut new_df = DataFrame::new(vec![])?;
|
||||||
|
for df in df_vec.iter() {
|
||||||
|
new_df.vstack_mut(df)?;
|
||||||
|
}
|
||||||
|
|
||||||
|
// return the new dataframe
|
||||||
|
check_quantamental_dataframe(&new_df)?;
|
||||||
|
Ok(new_df)
|
||||||
|
}
|
||||||
|
|
||||||
/// Splits a dataframe by ticker.
|
/// Splits a dataframe by ticker.
|
||||||
#[allow(dead_code)]
|
#[allow(dead_code)]
|
||||||
fn split_df_by_tickers(
|
fn split_df_by_tickers(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user