From 4ef75b8e3f958308a86c71f6dbd7ecbb5823bd69 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Thu, 19 Feb 2026 01:24:15 +0000 Subject: [PATCH 1/2] Return each hourly time series as separate dataframe in dataframes dict - Split combined HourlyData by variable type (e.g. Zone Mean Air Temperature, Zone Air Relative Humidity) into separate dataframes - Use keys like HourlyData_Zone_Mean_Air_Temperature for each variable - Update docs to reflect new dataframe key format Co-authored-by: Sam Wolk --- docs/tutorials/run-simulations/simulation_tasking.md | 2 +- src/globi/pipelines.py | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/docs/tutorials/run-simulations/simulation_tasking.md b/docs/tutorials/run-simulations/simulation_tasking.md index fd8e8ee..4fedc8d 100644 --- a/docs/tutorials/run-simulations/simulation_tasking.md +++ b/docs/tutorials/run-simulations/simulation_tasking.md @@ -380,7 +380,7 @@ where: **Additional options**: -- `--dataframe-key {KEY}`: specify which dataframe to download (default: `EnergyAndPeak`). other options may include `HourlyData` if hourly data was configured +- `--dataframe-key {KEY}`: specify which dataframe to download (default: `EnergyAndPeak`). if hourly data was configured, each time series is a separate dataframe (e.g. `HourlyData_Zone_Mean_Air_Temperature`, `HourlyData_Zone_Air_Relative_Humidity`) - `--include-csv`: include CSV export in addition to parquet (CSV is automatically included for `EnergyAndPeak` dataframe) **Example with all options**: diff --git a/src/globi/pipelines.py b/src/globi/pipelines.py index 74d6cae..0fd364b 100644 --- a/src/globi/pipelines.py +++ b/src/globi/pipelines.py @@ -260,7 +260,10 @@ def post_geometry_callback(idf: IDF) -> IDF: hourly_df = hourly_df.set_index(old_ix, append=True) if spec.parent_experiment_spec.hourly_data_config.does_dataframe_output: - dfs["HourlyData"] = hourly_df + for meter_name in hourly_df.columns.get_level_values("Meter").unique(): + variable_df = hourly_df.xs(meter_name, level="Meter", axis=1) + dataframe_key = f"HourlyData_{meter_name.replace(' ', '_')}" + dfs[dataframe_key] = variable_df if spec.parent_experiment_spec.hourly_data_config.does_file_output: hourly_data_outpath = tempdir / "outputs_hourly_data.pq" hourly_df.to_parquet(hourly_data_outpath) From 54bf22daa7f66fae4e0473454ae00ed36ad0989a Mon Sep 17 00:00:00 2001 From: Sam Wolk <36545842+szvsw@users.noreply.github.com> Date: Thu, 19 Feb 2026 08:33:06 -0500 Subject: [PATCH 2/2] slightly change pathing syntax --- docs/tutorials/run-simulations/simulation_tasking.md | 2 +- src/globi/pipelines.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/tutorials/run-simulations/simulation_tasking.md b/docs/tutorials/run-simulations/simulation_tasking.md index 4fedc8d..c3e9191 100644 --- a/docs/tutorials/run-simulations/simulation_tasking.md +++ b/docs/tutorials/run-simulations/simulation_tasking.md @@ -380,7 +380,7 @@ where: **Additional options**: -- `--dataframe-key {KEY}`: specify which dataframe to download (default: `EnergyAndPeak`). if hourly data was configured, each time series is a separate dataframe (e.g. `HourlyData_Zone_Mean_Air_Temperature`, `HourlyData_Zone_Air_Relative_Humidity`) +- `--dataframe-key {KEY}`: specify which dataframe to download (default: `EnergyAndPeak`). if hourly data was configured, each time series is a separate dataframe (e.g. `HourlyData.Zone_Mean_Air_Temperature`, `HourlyData.Zone_Air_Relative_Humidity`) - `--include-csv`: include CSV export in addition to parquet (CSV is automatically included for `EnergyAndPeak` dataframe) **Example with all options**: diff --git a/src/globi/pipelines.py b/src/globi/pipelines.py index 0fd364b..4839130 100644 --- a/src/globi/pipelines.py +++ b/src/globi/pipelines.py @@ -262,7 +262,7 @@ def post_geometry_callback(idf: IDF) -> IDF: if spec.parent_experiment_spec.hourly_data_config.does_dataframe_output: for meter_name in hourly_df.columns.get_level_values("Meter").unique(): variable_df = hourly_df.xs(meter_name, level="Meter", axis=1) - dataframe_key = f"HourlyData_{meter_name.replace(' ', '_')}" + dataframe_key = f"HourlyData.{meter_name.replace(' ', '')}" dfs[dataframe_key] = variable_df if spec.parent_experiment_spec.hourly_data_config.does_file_output: hourly_data_outpath = tempdir / "outputs_hourly_data.pq"