multi_index_example/
multi_index_example.rs1use pandrs::error::Result;
2use pandrs::{DataFrame, Index, MultiIndex};
3
4fn main() -> Result<()> {
5 println!("=== Example of Using MultiIndex ===\n");
6
7 println!("--- Creating MultiIndex from Tuples ---");
12
13 let tuples = vec![
15 vec!["A".to_string(), "a".to_string()],
16 vec!["A".to_string(), "b".to_string()],
17 vec!["B".to_string(), "a".to_string()],
18 vec!["B".to_string(), "b".to_string()],
19 ];
20
21 let names = Some(vec![Some("first".to_string()), Some("second".to_string())]);
22 let multi_idx = MultiIndex::from_tuples(tuples, names)?;
23
24 println!("MultiIndex: {:?}\n", multi_idx);
25 println!("Number of Levels: {}", multi_idx.n_levels());
26 println!("Number of Rows: {}\n", multi_idx.len());
27
28 println!("--- Retrieving Level Values ---");
33 let level0_values = multi_idx.get_level_values(0)?;
34 println!("Values in Level 0: {:?}", level0_values);
35
36 let level1_values = multi_idx.get_level_values(1)?;
37 println!("Values in Level 1: {:?}", level1_values);
38
39 println!("--- Swapping Levels ---");
40 let swapped = multi_idx.swaplevel(0, 1)?;
41 println!("After Swapping Levels: {:?}\n", swapped);
42
43 println!("--- DataFrame with MultiIndex ---");
48
49 let mut df = DataFrame::with_multi_index(multi_idx.clone());
51
52 let data = vec![
54 "data1".to_string(),
55 "data2".to_string(),
56 "data3".to_string(),
57 "data4".to_string(),
58 ];
59 df.add_column(
60 "data".to_string(),
61 pandrs::Series::new(data, Some("data".to_string()))?,
62 )?;
63
64 println!("DataFrame: {:?}\n", df);
65 println!("Number of Rows: {}", df.row_count());
66 println!("Number of Columns: {}", df.column_count());
67
68 println!("\n--- Example of Index Conversion ---");
73
74 let simple_idx = Index::new(vec!["X".to_string(), "Y".to_string(), "Z".to_string()])?;
76 let mut simple_df = DataFrame::with_index(simple_idx);
77
78 let values = vec![100, 200, 300];
80 let str_values: Vec<String> = values.iter().map(|v| v.to_string()).collect();
81 simple_df.add_column(
82 "values".to_string(),
83 pandrs::Series::new(str_values, Some("values".to_string()))?,
84 )?;
85
86 println!("Simple Index DataFrame: {:?}", simple_df);
87
88 let tuples = vec![
90 vec!["Category".to_string(), "X".to_string()],
91 vec!["Category".to_string(), "Y".to_string()],
92 vec!["Category".to_string(), "Z".to_string()],
93 ];
94
95 let new_multi_idx = MultiIndex::from_tuples(tuples, None)?;
97 simple_df.set_multi_index(new_multi_idx)?;
98
99 println!("After Conversion to MultiIndex: {:?}", simple_df);
100
101 println!("\n=== Sample Complete ===");
102 Ok(())
103}